找不到驱动程序异常 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的主要内容,如果未能解决你的问题,请参考以下文章

在 Tomcat 中找不到适合 jdbc 错误的驱动程序

java.sql.SQLException:找不到适合 jdbc:microsoft:sqlserver 的驱动程序

使用配置文件找不到文件异常

Mac OSX 的 JDBC ODBC 桥接器

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

部署后找不到 jdbc mysql 驱动程序