找不到适合的驱动程序以连接jdbc:h2:tcp。

4

当我尝试使用Java Web应用程序连接到H2数据库时,会抛出java.sql.SQLException:找不到适当的驱动程序jdbc:h2:tcp:// localhost /〜/ ZadatakDB。

我可以在没有任何问题的情况下使用H2控制台,并且ping测试成功。

我还将h2-1.3.176 jar文件添加到Libraries和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;
}

我可能错过了什么?

我还将添加堆栈跟踪:

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异常? - Jihed Amine
我没有,我只有 SQL 异常。 - Sarpy
2
如果你在方法的第一行使用 Class.forName("org.h2.Driver").newInstance(); 会发生什么?它应该会在 DriverManager 中注册所需的驱动程序。 - Rafal G.
当我按照你说的那样,将那行代码放入try-catch块中时,它起作用了。谢谢。我会查阅相关文档以了解它的作用。 - Sarpy
你不需要创建一个新的实例。Class.forName("org.h2.Driver")就足够了。 - marcolopes
2个回答

8

H2数据库的JDBC驱动未在类路径中,或者驱动未加载。使用以下代码加载驱动程序类:

Class.forName("org.h2.Driver");

3
我插入了这行代码,但却遇到了一个ClassNotFoundException异常。 - Guangliang

0
你必须写:
DriverManager driver = DriverManager.getConnection(url,username, pw);
driver.setDriverClassName("org.h2.Driver");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接