有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用tomcat时,如何加载JDBC驱动程序?

我正在使用Eclipse和Tomcat7。我对这两种产品和Java本身都没有什么经验。我试图从Servlet连接到derby数据库。最初,我的doGet()中只有以下内容:

conn = DriverManager.getConnection(connectionURL);

我将connectionURL定义为

static private String connectionURL = "jdbc:derby://localhost:1527/seconddb";

然后,我将以下内容添加到构建路径和部署程序集中

C:\DERBY\db-derby-10.10.1.1-bin\lib\derbyclient.jar

这就是我所做的一切。我有点假设Tomcat会找到驱动程序类并加载它。我犯了以下错误

java.sql.SQLException: No suitable driver found for jdbc:derby://localhost:1527/seconddb

然后,我继续在doGet()中添加以下代码以加载驱动程序类:

    try {
           Class.forName("org.apache.derby.jdbc.ClientDriver");
        }
        catch(ClassNotFoundException ex) {
           System.out.println("Error: unable to load driver class!");
           System.exit(1);
    }

现在它成功了。我认为在Java1.4之后,没有必要显式地加载JDBC驱动程序类。那么我做错了什么?我已经给出了下面的全部代码

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    Connection conn = null;

    try {
           Class.forName("org.apache.derby.jdbc.ClientDriver");
        }
        catch(ClassNotFoundException ex) {
           System.out.println("Error: unable to load driver class!");
           System.exit(1);
    }

    try {
        conn = DriverManager.getConnection(connectionURL);
        //DriverManager.getConnection("jdbc:derby://localhost:1527/testdb;create=true");
    }
    catch (SQLException e) {
        e.printStackTrace();
    }
    PrintWriter p = response.getWriter ();
    p.println("Connected to database");

    try {
        if (conn != null) {
            conn.close();
        }
    }
    catch (SQLException e) {
        e.printStackTrace();
    }
}

我正在使用Java1.7


共 (3) 个答案

  1. # 1 楼答案

    我在这里可能是错的,但在您的第二个代码示例connectionURL中

    static private String connectionURL = "jdbc:derby://localhost:1527/seconddb";

    不包括“create=true”;来完成这个陈述。在您的完整代码示例中,它被包括在内,但被注释掉了

  2. # 2 楼答案

    我无法解释原因,但我是这样做的:

    • 如果驱动程序位于war中,我必须在web应用程序的某个地方调用初始化方法中的Class.forName("...Driver");
    • 如果驱动程序位于Tomcat库中,则在需要时自动加载

    我知道这与其说是一个清晰的解释,不如说是一条经验法则,但我在课堂加载方面的知识不允许我给出更好的答案

  3. # 3 楼答案

    您的Derby驱动程序不支持JDBC4自动加载,因此您必须手动执行。尝试查找更为最新的版本