【问题标题】:JDBC driver loading issue in JDBC connection poolingJDBC 连接池中的 JDBC 驱动程序加载问题
【发布时间】:2012-02-28 22:03:33
【问题描述】:

我已设置 JDBC 连接池,当我执行示例 JSP 页面尝试使用连接时,它显示以下错误。

Error occurred org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot load 
    JDBC driver class 'com.sybase.jdbc3.jdbc.SybDriver' 

我也将jconn2.jar 放在common/libweb-inf/lib 中。 如何纠正错误?

    The context.xml

<Context>
        <Resource name="jdbc/mysybase" auth="Container"
                  type="javax.sql.DataSource" driverClassName="com.sybase.jdbc3.jdbc.SybDriver"
                  url="jdbc:sybase:Tds:H2S33.studtrack.com:2025/student"
                  username="scott" password="tiger" maxActive="20" maxIdle="10"
                  maxWait="-1"/>
    </Context>


    In The web.xml file
    <resource-ref>
     <description>Sybase Datasource example</description>
     <res-ref-name>jdbc/mysybase</res-ref-name>
     <res-type>javax.sql.DataSource</res-type>
     <res-auth>Container</res-auth>
    </resource-ref>


    And the jsp page

    <%@page import="java.sql.*"%>
    <%@page import="javax.naming.Context"%>
    <%@page import="javax.naming.InitialContext"%>
    <%@page import="java.sql.Connection"%>
    <%@page import="java.sql.SQLException"%>
    <%@page import="java.sql.ResultSet"%>
    <%@page import="javax.sql.DataSource"%>
    <html>
    <head>
    <title>Obtaining a Connection</title>
    </head>
    <body>

    <%
        Connection conn = null;
        ResultSet result = null;
        Statement stmt = null;
         try {
           Context initContext = new InitialContext();
        Context envContext  = (Context)initContext.lookup("java:/comp/env");
           DataSource ds = (DataSource)envContext.lookup("jdbc/mysybase");
           conn = ds.getConnection();
        if (conn != null) 
        {
            String message = "Got Connection " + conn.toString() + ", ";
            out.write(message);
        }
        else
        {
            out.write("hello no conn obtained");

        }

            stmt = conn.createStatement();
            result = stmt.executeQuery("SELECT * FROM Student");
        while(result.next())
        {
            out.write(result.getString("name"));
        }

         }
         catch (SQLException e) {
             out.write("Error occurred " + e);
          }

    %>

    </body>
    </html>`

【问题讨论】:

  • 您有所有其他相关的 JAR 文件吗?比如你的lib中的commons dbcp、collections、pool?
  • 你有完整的堆栈跟踪吗?它应该包含根异常。
  • 我的 common/lib 中有所有这些 jar 文件。我还需要从下面提到的 aprt 中获得什么。 servlet-api.jar、命名资源.jar、命名工厂-dbcp.jar、命名工厂.jar、jtds2.jar、jsp-api.jar、jconn2.jar、jasper-runtime.jar、jasper-compiler- jdt.jar、jasper-compiler.jar、commons-el.jar。
  • 发生错误 org.apache.tomcat.dbcp.dbcp.SQLNestedException:无法加载 JDBC 驱动程序类 'com.sybase.jdbc3.jdbc.SybDriver' 是我执行 jsp 页面时得到的全部。
  • 确保您的 jconn2.jar 中有 com.sybase.jdbc3.jdbc.SybDriver 而不是 com.sybase.jdbc2.jdbc.SybDriver

标签: java jakarta-ee jdbc connection-pooling


【解决方案1】:

Sybase JDBC 驱动在不同版本中有不同的包命名。您正在尝试加载较新版本的 com.sybase.jdbc3.jdbc.SybDriver,而您的 jar 很可能包含较旧的 com.sybase.jdbc2.jdbc.SybDriver

【讨论】:

  • 最后一件事。此池适用于 jsp/servlets。是否需要对 jdbc 池进行任何更改才能使普通 java 类可用。
猜你喜欢
  • 1970-01-01
  • 2014-06-30
  • 2011-04-01
  • 2021-12-29
  • 2011-08-24
  • 2012-03-10
  • 2013-08-06
  • 2011-10-24
相关资源
最近更新 更多