【问题标题】:No suitable driver found for jdbc:h2:tcp找不到适合 jdbc:h2:tcp 的驱动程序
【发布时间】: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") 就够了。

标签: java eclipse jdbc h2


【解决方案1】:

H2 数据库的 JDBC 驱动程序不在类路径中,或者驱动程序已卸载。使用它来加载驱动类:

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

【讨论】:

  • 我插入了该行,但得到了一个 ClassNotFound 执行。
猜你喜欢
  • 2012-10-06
  • 1970-01-01
  • 1970-01-01
  • 2012-12-09
  • 2016-04-02
  • 2019-03-08
  • 2013-03-16
  • 2013-07-04
相关资源
最近更新 更多