使用 jsp 插入 oracle 数据库时出现异常“jdbc.odbc.JdbcOdbcDriver”

Posted

技术标签:

【中文标题】使用 jsp 插入 oracle 数据库时出现异常“jdbc.odbc.JdbcOdbcDriver”【英文标题】:Exception "jdbc.odbc.JdbcOdbcDriver" while inserting into oracle database using jsp 【发布时间】:2013-07-21 16:48:43 【问题描述】:

我使用简单的 JSP 代码将 5 个字段插入到我的 oracle 10g 数据库中。 在提交表单时,我收到一个异常“jdbc.odbc.JdbcOdbcDriver”。 我无法理解问题所在。 请帮帮我。 我的代码如下:

signup.html

<html>
<head><title>Sign up</title>
<link rel="stylesheet" type="text/css" href="default.css">
<link rel="stylesheet" type="text/css" href="align.css">
<script language="javascript">
function validation(Form_obj)

    if(Form_obj.fnametxt.value.length==0)
    
        alert("Please, fill up the first name!!!");

        Form_obj.fnametxt.focus();
        return false;
    
    if(Form_obj.lnametxt.value.length==0)
    
        alert("Please, fill up the last name!!!");

        Form_obj.lnametxt.focus();
        return false;
    
    if(Form_obj.usrnametxt.value.length==0)
    
        alert("Please, fill up the user name!!!");

        Form_obj.usrnametxt.focus();
        return false;
    
    if(Form_obj.pswdtxt.value.length==0)
    
        alert("Please, fill up the password name!!!");

        Form_obj.pswdtxt.focus();
        return false;
    
    if(Form_obj.phonetxt.value.length==0)
    
        alert("Please, fill up the phone number!!!");

        Form_obj.phonetxt.focus();
        return false;
    
    return true;

</script>

</head>
<a href="index.html"><h1>Jobs Portal</h1></a>
<div id="sign">Sign up</div>
<center>
<form id="form" action="signup.jsp" method="post" name="signform" onSubmit="return     validation(this)">

<table border="3" cellpadding="0" cellspacing="0">
<tr><td>
<table>
<tr><td colspan="2" align="center">Fill your details</td></tr>
<tr><td colspan="2">&nbsp;</td></tr>
<tr><td>First Name</td><td><input type="text" name="fnametxt"></td></tr>
<tr><td>Last Name</td><td><input type="text" name="lnametxt"></td></tr>
<tr><td>User Name</td><td><input type="text" name="usrnametxt"></td></tr>
<tr><td>Password</td><td><input type="password" name="pswdtxt"></td></tr>
<tr><td>Mobile no.</td><td><input type="text" name="phonetxt"></td></tr>
<tr><td colspan="2" align="center"><input type="submit" name="signbt" value="Sign up" >                                 </td></tr>
</td></tr>
</table>
</form>
</center>
</html>

signup.jsp

<%@page language="java" import="java.sql.*"%>
<%@page import="java.io.*"%>
<%

try

    ResultSet rs=null;
            Class.forName("jdbc.odbc.JdbcOdbcDriver");
        Connection con=    DriverManager.getConnection("jdbc:oracle:jobsportal","abdus","jbaat");
        Statement stmt=con.createStatement();
    String fname=request.getParameter("fnametxt");
    String lname=request.getParameter("lnametxt");
    String usrname=request.getParameter("usrnametxt");
    String pswd=request.getParameter("pswdtxt");
    String phone=request.getParameter("phonetxt");
    stmt.executeUpdate("insert into jobs(fname,lname,username,password,phone)     values('"+fname+"','"+lname+"','"+usrname+"','"+pswd+"','"+phone+"'");
    rs=stmt.executeQuery("select * from jobs");
%>
<html>
<head><title>Sign up Successful</title>
<link rel="stylesheet" type="text/css" href="default.css">
</head>
Your details</br>
<table border="0">
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>User Name</th>
<th>Password</th>
<th>Phone number</th>
</tr>
<%
while(rs.next())

%>
<tr>
<td><%=rs.getString("fname")%></td>
<td><%=rs.getString("lname")%></td>
<td><%=rs.getString("username")%></td>
<td><%=rs.getString("password")%></td>
<td><%=rs.getString("phone")%></td>
</tr>
<% rs.close();

catch(ClassNotFoundException e)

    out.println(e.getMessage());
 %>
</table>

</html>

【问题讨论】:

发布异常的完整堆栈跟踪。并且不要使用 JSP 来执行 Java 代码。请改用 servlet。 不要使用 ODBC 桥。它已被弃用、错误且速度慢(并且从未打算在生产环境中使用)。使用真正的 Oracl JDBC 驱动程序(它还有一个额外的好处,就是您不需要安装 Oracle 客户端)。有关详细信息,请参阅 Oracle 手册:docs.oracle.com/cd/E11882_01/java.112/e16548/toc.htm 【参考方案1】:

您正在使用 JDBC/ODBC 驱动程序连接到 Oracle 数据库。而且您使用了错误的类名来加载它。正确的类名是sun.jdbc.odbc.JdbcOdbcDriver

JDBC/ODBC 驱动程序是一个旧的、过时的驱动程序,它是多年前创建的,当时数据库还没有本地 JDBC 驱动程序。如果您的数据库是 Oracle,请使用 Oracle JDBC 驱动程序,而不是 JDBC/ODBC 驱动程序。您必须使用 Oracle 驱动程序文档中描述的不同 URL。

【讨论】:

哦,那么对不起。我一直认为这必须像任何其他驱动程序一样添加。那么,OP 似乎得到的 ClassNotFoundException 是从哪里来的呢?编辑:发现:类名其实是sun.jdbc.odbc.JdbcOdbcDriver 在使用此类名称时,我的连接语句出现错误,即 Connection con= DriverManager.getConnection("jdbc:oracle:jobsportal","abdus","jbaat");堆栈跟踪:org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:505) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:398) org.apache.jasper.servlet.JspServlet.serviceJspFile( JspServlet.java:337) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266) javax.servlet.http.HttpServlet.service(HttpServlet.java:803) @AbdusSamad:不要在 cmets 中发布堆栈跟踪。改为编辑您的问题(并发布相关部分和错误消息,而不是来自 JSP/servlet 引擎的“噪音”)【参考方案2】:

问题可能出在您的驱动程序名称上。如果使用了 oracle 驱动程序,您必须指定它是 oracle 瘦驱动程序还是 oci 或 kprb。例如,

对于甲骨文:

Jdbc Driver Name="oracle.jdbc.driver.OracleDriver"(如果您的系统上有它)

网址格式="jdbc:oracle:thin:@hostname:port Number:databaseName"

对于 Odbc:

odbc bridge="sun.jdbc.odbc.JdbcOdbcDriver"

网址格式="jdbc:odbc:dsn_name"

【讨论】:

以上是关于使用 jsp 插入 oracle 数据库时出现异常“jdbc.odbc.JdbcOdbcDriver”的主要内容,如果未能解决你的问题,请参考以下文章

使用python将数据从csv文件插入oracle时出现错误ORA-01722:无效数字

插入时出现 Oracle 错误 SP2-0734

将数据集导入 Docker 下的 Clickhouse 时出现“异常:没有要插入的数据”

使用Tomcat服务器时出现空指针异常!

使用JDBC连接将记录插入Apache Ignite Cluster时出现异常

在某些实体中保存 oracle 类型对象时出现异常