找不到驱动程序异常 JDBC
Posted
技术标签:
【中文标题】找不到驱动程序异常 JDBC【英文标题】:Driver not found exception JDBC 【发布时间】:2018-05-01 09:45:19 【问题描述】:从 Eclipse 连接到数据库时,我不断收到下一个异常。
java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at connection.ConnectionFactory.<init>(ConnectionFactory.java:29)
at connection.ConnectionFactory.<clinit>(ConnectionFactory.java:25)
at dao.StudentDAO.insert(StudentDAO.java:53)
at bll.StudentBLL.insertStudent(StudentBLL.java:39)
at start.Start.main(Start.java:23)
但是,连接已经建立,我可以从数据库中读取,我可以写入,但异常并没有消失。 我已将 mysql-connector-java-5.1.45-bin 添加到带有构建路径的路径文件中,并出现在库部分。 我相信 URL、用户和密码是正确写入的,因为我可以在数据库中写入。 连接建立:
try
connection = DriverManager.getConnection("jdbc:mysql://localHost:3306/schooldb","root","");
catch (SQLException e)
LOGGER.log(Level.WARNING, "An error occured while trying to connect to the database");
e.printStackTrace();
return connection;
驱动的代码是:
private static final String DRIVER = "com.mysql.cj.jdbc.Driver";
try
Class.forName(DRIVER);
catch (ClassNotFoundException e)
e.printStackTrace();
我正在 Maven 项目中使用 eclipse Oxygen。 该数据库是使用 MYSQLWorkbench 6.0CE 创建的。
但我不知道驱动程序出了什么问题。
【问题讨论】:
localhost 在连接字符串中是用大写的 H 写的,这可能是问题吗?也不确定 jdbc 是否接受空字符串作为密码 您使用的是哪个版本的驱动程序? "但是,连接已建立..." 如果您收到ClassCastException
,则不会。是什么让你认为你有联系?异常应该在那里停止你的代码,除非你的代码中有一个catch(Exception ex)
。此外,您应该得到类似“没有为 URL 找到合适的驱动程序...”而不是 ClassCastException
,这意味着您正在某处执行 Class.forName("com.mysql.cj.jdbc.Driver")
,自 Java 1.6 以来您就不需要了。跨度>
我已经尝试插入数据库并打印数据库中的内容(也检查了数据库)所以我认为由于两者都在工作,所以连接正常。
【参考方案1】:
我认为您的驱动程序名称不正确 这是我用的驱动,试试看
com.mysql.jdbc.Driver
也将本地主机中的“H”设为小写
如果上述解决方案不起作用:
1:删除导入com.mysql.cj.jdbc.*
2:使用这个驱动private static final String DRIVER = "com.mysql.cj.jdbc.Driver";
【讨论】:
域名,包括localhost
,不区分大小写。所以这与它无关。
是的,你是对的,我把驱动名写错了,谢谢!【参考方案2】:
问题是你使用的是 MySQL Connector/J 5.1.45 驱动,它使用了驱动类名com.mysql.jdbc.Driver
,但是尝试加载新的 MySQL Connector/J 8.x 驱动中引入的驱动类名.
要么升级到 MySQL Connector/J 8.0.11(可在 https://dev.mysql.com/downloads/connector/j/ 获得),或者 - 如果您现在想继续使用 5.1.45 - 使用
private static final String DRIVER = "com.mysql.jdbc.Driver";
顺便说一句,为了向后兼容,MySQL Connector/J 8.x 还保留了上述类以供加载。
从技术上讲,由于 JDBC 4 和更高版本的自动驱动程序加载,在很多情况下甚至不需要像这样加载驱动程序。
【讨论】:
以上是关于找不到驱动程序异常 JDBC的主要内容,如果未能解决你的问题,请参考以下文章
java.sql.SQLException:找不到适合 jdbc:microsoft:sqlserver 的驱动程序