4

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

错误:

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 是该类的正确路径。这就是我在网上和使用定位时发现的。

我尝试将环境类路径设置为CLASSPATH=$CLASSPATH:/usr/share/java/mysql-connector-java.jar/etc/environment. 如您所见,我也尝试了 -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 遗漏了什么?

我该如何解决?

注意:这个类只是一个快速测试来帮助我诊断为什么一个更大的(专有)应用程序不会连接到我的数据库。较大的应用程序会引发相同的错误。我希望修复这个小班将修复更大的应用程序。

4

2 回答 2

3

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

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

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

于 2013-11-13T09:45:14.310 回答
1

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

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

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

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

您应该至少对该文件具有读取权限,并且显然该文件应该存在。

于 2013-11-13T01:15:18.217 回答