JDBC找不到合适的驱动程序,无法获取驱动程序[重复]

Posted

技术标签:

【中文标题】JDBC找不到合适的驱动程序,无法获取驱动程序[重复]【英文标题】:JDBC no suitable driver found and can't get driver [duplicate] 【发布时间】:2020-06-29 15:30:58 【问题描述】:

我正在尝试通过 Java 连接到我的嵌入式 H2 数据库。我找到了关于这个的各种线程和教程,现在有这个代码:

Connection con = null;
Properties connectionProps = new Properties();
connectionProps.put("user", "username");
connectionProps.put("password", "password");
try 
    Class.forName("org.h2.Driver");
 catch (ClassNotFoundException e) 
    e.printStackTrace();


con = DriverManager.getConnection("jdbc:h2:~/test", connectionProps);

我收到“没有为 jdbc:h2:~/test 找到合适的驱动程序”错误消息。我在某些线程中找到了 Class.forName(...) 作为解决方案,但它似乎不起作用(ClassNotFoundException)。我到底需要做什么才能让它发挥作用?

编辑:将正确的 H2 驱动程序放入 Class.forname(); 我仍然得到相同的异常,并且在结束通知中链接的帖子也没有答案(实际上有同样的问题)。

【问题讨论】:

类路径中有 H2 数据库驱动程序吗?我注意到您正在尝试加载 mysql JDBC 驱动程序,这在您想使用 H2 时当然不相关(尽管使用自动驱动程序加载,如果 H2 驱动程序位于类路径上,它将在简单的 Java 应用程序中工作)。请提供minimal reproducible example,包括您运行应用程序的方式。 如果要使用 H2,为什么要使用 MySQL 的驱动程序类和 URL 语法? 将其固定为Class.forName("org.h2.Driver"); 仍然得到classnotfoundexception 将您的类路径转储到控制台以查看它是否包含 H2。 我该怎么做? 【参考方案1】:

您使用的是完全不同的驱动程序

Class.forName("com.mysql.jdbc.Driver");这是mysql驱动

jdbc:h2:~/test这是h2 db

您需要致电Class.forName("org.h2.Driver");

更多信息在这里:https://superuser.com/questions/290999/where-can-i-find-h2-jdbc-driver

【讨论】:

我认为问题在于 OP 在类路径中没有驱动程序。通过自动驱动程序加载,自 2006 年以来就不再需要使用 Class.forName(至少在简单的 Java 应用程序中,具有多个类加载器和类路径的复杂应用程序是另一回事)。 我刚刚尝试了Class.forName("org.h2.Driver");,但得到了相同的 ClassNotFoundException @MarkRotteveel 我一直在通过 Class.forName 使用 JDBC,并且在我读过的所有书籍中,作者都​​是这样做的。需要阅读这个,你有一些链接吗? 当然,请阅读JDBC 4.3 specification,特别是第 4.1 和 9.2 节,DriverManager,或查看How is driver class located in JDBC4。正如我所说,自 2006 年以来,在简单的 Java 程序中使用 Java 6 (JDBC 4) 就没有必要了,假设使用的是 JDBC 4 或更高版本的驱动程序。 @MarkRotteveel - 非常感谢!

以上是关于JDBC找不到合适的驱动程序,无法获取驱动程序[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Java SQL JDBC 错误 - 找不到合适的驱动程序错误

Xampp 服务器上的 Java 小程序 - 在 jdbc:mysql://localhost:3306/ 上找不到合适的驱动程序

如何修复:找不到适合 jdbc:sqlserver 的驱动程序 [重复]

Java MySQL连接不起作用:找不到合适的驱动程序[重复]

无法构建 EntityManagerFactory + 找不到 JDBC 驱动程序类

找不到适用于 jdbc 的异常驱动程序? [复制]