每个人都过得愉快,
我在使Glassfish 3.1.2看到一些进口罐子时遇到了一些问题。因为这是我的毕业项目我有约束。我不能使用除Glassfish,Netbeans以外的任何东西,我也不能使用Maven,Hibernate,Ear或者其他任何东西。
我正在使用嵌入式Derby驱动程序。 (我可以使用另一个数据库,但在我的试验中,问题仍然存在)。
我写了一些简单的java代码来连接数据库:
try{
Connection c = DriverManager.getConnection(URL, USER, PWD);
Statement st = c.createStatement();
st.executeUpdate("CREATE TABLE Users" +
" (ACCOUNT VARCHAR(20) PRIMARY KEY," +
" PWD VARCHAR(20) NOT NULL," +
" USERTYPE INTEGER NOT NULL)");
...
}
catch (SQLException x){
System.out.println(x);
}
它很丑,它不使用连接池,它可以工作。我稍后会用它们。 显然我必须将derbyclient.jar添加到libs。
当我尝试在servlet中使用此方法时出现问题:
protected void processRequest(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
try{
DriverManager.registerDriver(org.apache.derby.jdbc.ClientDriver);
Connection c = DriverManager.getConnection(dbUsr, pwd, url);
Statement st = c.createStatement();
ResultSet rs = st.executeQuery(query);
...
}catch (SQLException e){
ServletException e1 = new ServletException(e.getMessage());
throw e1;
}
我无法编译servlet,因为“Package org.apache.derby.jdbc不存在”。
我可以提供更多信息(20多个小时的阅读和不成功的试验):
我在我的智慧结束。有人在乎帮忙吗?
编辑:
昨天我收到了老师的消息:她指责Netbeans IDE失去了对罐子的追踪。这似乎是一个已知的错误。
我被热烈鼓励切换到tomcat服务器。我肯定会尝试一下,我会继续努力解决这个问题。还有其他好主意吗?
答案 0 :(得分:2)
“No suitable driver found
”通常表示您提供给连接的JDBC URL语法不正确。或者根本没有加载驱动程序。
在连接到DB之前,必须使用Class.forName
加载驱动程序。
Derby的URL是:
Class.forName("org.apache.derby.jdbc.ClientDriver");
有关Derby的更多详情,请查看documentation
同时检查您的类路径中是否有derby.jar
。我建议将derby.jar放在项目的/WEB-INF/lib
目录的物理位置。然后IDE将负责其余的工作。
答案 1 :(得分:1)
您应该(通常)不使用DriverManager自行注册驱动程序,这是驱动程序实现的责任。对于JDBC 3.0和早期版本(Java 5及更早版本),您需要加载该类以使其自行注册:
Class.forName("org.apache.derby.jdbc.ClientDriver")
加载类时,驱动程序会使用DriverManager注册自己。
对于JDBC 4.0兼容驱动程序(Java 6和7),您甚至不需要这样做,因为JDBC 4.x使用ServiceLoader机制,并且每个兼容驱动程序将在META-INF/services/java.sql.Driver
文件中列出其驱动程序实现。它的jar文件。
所以一般情况下你应该不自己调用'DriverManager.registerDriver(..)'。如果由于某种原因你确实需要在代码中自己注册驱动程序(例如,因为驱动程序实际上没有自动向DriverManager注册),那么确保实际的驱动程序也在你的编译路径(构建路径)上,并且不只是在应用程序服务器的lib文件夹中(这似乎是你的实际问题)。
另外请记住,您需要注册一个Driver实例,而不是一个类。所以你需要实例化它:
DriverManager.registerDriver(new org.apache.derby.jdbc.ClientDriver());