【发布时间】:2015-07-12 09:09:42
【问题描述】:
一个 java.sql.SQLException:当我尝试使用 java Web 应用程序连接到 h2 数据库时,抛出了没有为 jdbc:h2:tcp://localhost/~/ZadatakDB 找到合适的驱动程序。
我可以使用H2控制台没有任何问题,并且ping成功。
我还将 h2-1.3.176 jar 文件添加到库和 WEB-INF/lib。
这是我用来连接的 Java 方法:
private static Connection connectToDatabase() throws SQLException,
IOException {
String url = "jdbc:h2:tcp://localhost/~/ZadatakDB";
String username = "student";
String pw = "student";
Connection connection = DriverManager.getConnection(url,
username, pw);
return connection;
}
我可能会错过什么?
我还会添加 StackTrace:
java.sql.SQLException: No suitable driver found for jdbc:h2:tcp://localhost/~/ZadatakDB
at java.sql.DriverManager.getConnection(DriverManager.java:689)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
at hr.web.aplikacija.DatabaseUtils.connectToDatabase(DatabaseUtils.java:20)
at hr.web.aplikacija.DatabaseUtils.insertForm(DatabaseUtils.java:38)
at hr.web.aplikacije.servlet.KorisnikServlet.doPost(KorisnikServlet.java:68)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:668)
at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:223)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1517)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1474)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
【问题讨论】:
-
堆栈跟踪中是否有 ClassNotFound 异常?
-
我没有,我只有 SQL 异常
-
如果你使用会发生什么: Class.forName("org.h2.Driver").newInstance();在你方法的第一行?它应该在 DriverManager 中注册所需的驱动程序。
-
当我按照你说的做时,将那行代码放入 try-catch 块中,它起作用了。谢谢你。我将查找有关它的文档以了解它的作用。
-
您不需要创建新实例。 Class.forName("org.h2.Driver") 就够了。