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连接不起作用:找不到合适的驱动程序[重复]