【问题标题】:Java keeps saying it can't find the jdbc mysql driverJava一直说找不到jdbc mysql驱动
【发布时间】:2013-11-13 00:56:50
【问题描述】:

这是关于 jdbc 的 mysql 驱动程序的另一个问题。考虑到我在 google 上搜索时得到的搜索结果的数量,我很沮丧,我在其中找到的任何东西都对我有用。

错误:

hostname# java -cp /usr/share/java/mysql-connector.jar:/home/user JDBCTest
java.sql.SQLException: No suitable driver found for jdbc:mysql://<db ip>:3306/dbname
 at java.sql.DriverManager.getConnection(DriverManager.java:596)
 at java.sql.DriverManager.getConnection(DriverManager.java:215)
 at JDBCTest.main(sqltest.java:14)

代码(摘自简短的操作方法):

import java.sql.Connection;
import java.sql.DriverManager;

class JDBCTest {

    private static final String url = "jdbc:mysql://dbipaddress:3306/dbname";

    private static final String user = "username";

    private static final String password = "password";

    public static void main(String args[]) {
        try {
            Connection con = DriverManager.getConnection(url, user, password);
            System.out.println("Success");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

我 90% 确定 /usr/share/java/mysql-connector-java.jar 是该类的正确路径。这就是我在网上和使用 locate 时发现的。

我已经尝试在 /etc/environment 中将环境类路径设置为 CLASSPATH=$CLASSPATH:/usr/share/java/mysql-connector-java.jar。如您所见,我也尝试了 -cp 标志。

我可以使用命令行 mysql-client 使用 JDBCTest 类中的凭据连接到 mysql 服务器和数据库。所以这不是数据库服务器或我的用户/密码的错误。

据我所知,我的 jdbc url 是正确的。这是我在搜索时发现的比较常见的问题之一……

我在我的服务器上使用 Ubuntu 12.04 64 位。

libmysql-java 已安装。照原样,openjdk-7-jre-headless。

我完全在 Tomcat 之外运行它,因此所有将驱动程序复制到 Tomcat 目录的答案都不适用。

所以,我被难住了。我认为使用 -cp 标志只会强制它工作。我的 java 安装中是否缺少某些内容? openjdk-7-jre-headless 遗漏了什么?

我该如何解决这个问题?

注意:本课程只是一个快速测试,可帮助我诊断大型(专有)应用程序无法连接到我的数据库的原因。较大的应用程序会引发相同的错误。我希望修复这个小类将修复更大的应用程序。

【问题讨论】:

    标签: java mysql jdbc ubuntu-12.04 openjdk


    【解决方案1】:

    您可能正在使用不符合 JDBC 4 的 MySQL JDBC 驱动程序版本,因此DriverManager 不会自动加载它。在这种情况下,您需要使用以下命令显式加载它:

    Class.forName("com.mysql.jdbc.Driver");
    

    另一种选择是使用符合 JDBC 4 并会自动加载的库版本。

    【讨论】:

    • 我在:mysql-connector-java-5.1.16.jar 当我下载并使用 mysql-connector-java-5.1.27-bin.jar 时,一切正常。这是否意味着这是 JDBC 4 合规性问题?
    • @DavidR。可能,有趣的是,根据MySQL site,5.1.16 从未发布过。
    【解决方案2】:

    尝试在 main 方法的第一行添加以下内容:

    Class.forName("com.mysql.jdbc.Driver");
    

    如果抛出异常,则 JVM 无法访问/usr/share/java/mysql-connector.jar。如果是这种情况,请使用以下命令检查文件权限:

    ls -lah /usr/share/java/mysql-connector.jar
    

    你应该至少有这个文件的读取权限,而且显然这个文件应该存在。

    【讨论】:

    • 嗯,我编译时出错了。这是在我的本地 Ubuntu 12.04 桌面上完成的,而不是在服务器上。至于文件权限,当我在 sudo 下运行 javac 并且作为我的普通用户时,它会出错。在服务器上,我以 root 身份运行所有内容。 .jar 为 644,由 root 拥有/分组。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    • 1970-01-01
    • 2012-07-14
    • 1970-01-01
    • 2020-05-02
    相关资源
    最近更新 更多