Java 使用tomcat时,如何加载JDBC驱动程序?
我正在使用Eclipse和Tomcat7。我对这两种产品和Java本身都没有什么经验。我试图从Servlet连接到derby数据库。最初,我的Java 使用tomcat时,如何加载JDBC驱动程序?,java,tomcat,jdbc,Java,Tomcat,Jdbc,我正在使用Eclipse和Tomcat7。我对这两种产品和Java本身都没有什么经验。我试图从Servlet连接到derby数据库。最初,我的doGet()中只有以下内容: conn = DriverManager.getConnection(connectionURL); 我将connectionURL定义为 static private String connectionURL = "jdbc:derby://localhost:1527/seconddb"; 然后,我将以下内容添加到构
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();
}
}
我使用的是java 1.7,我无法解释原因,但我是这样做的:
- 如果驱动程序位于war中,我必须调用
Class.forName(“…驱动程序”)
- 如果驱动程序位于Tomcat库中,则在需要时自动加载
我知道这更多的是一条经验法则,而不是一个清晰的解释,但是我在类加载方面的知识不允许我给出更好的答案…您的Derby驱动程序不支持JDBC 4自动加载,因此您必须手动执行。请尝试查找更为最新的版本。我可能在这里错了,但在您的第二个代码示例connectionURL中 静态私有字符串connectionURL=“jdbc:derby://localhost:1527/seconddb";
不包括“create=true”;来完成这个陈述。在您的完整代码示例中,它被包括在内,但被注释掉了 驱动程序自动加载是在Java 6(JDBC 4)中引入的,不是Java 1.4。但是您使用的Derby的任何版本都支持驱动程序检测模型吗?我使用的是我不久前下载的10.10.1.1。我认为它应该支持驾驶员检测。我在非web环境中使用它,不必显式加载驱动程序。我使用的是不久前下载的db derby 10.10.1.1。所以我认为它应该支持驾驶员检测。我在非网络环境下使用它,不必显式加载驱动程序。这似乎是一个合理的问题。我给出了所有的代码并清楚地解释了我的问题。那么为什么是a-1呢。这是为了阻止人们提问吗?对我来说,将jar文件放在tomcat/lib中似乎也不起作用。我也看了一篇类似的帖子,但这个解决方案对我来说不起作用。现在,我必须努力加载类,直到找到原因。我将尝试更新版本。但是,我在非web上下文(普通java程序)中使用Derby客户机JAR,并且不必显式加载该类。