【问题标题】:JDBC driver and terminal classpathJDBC 驱动程序和终端类路径
【发布时间】:2016-07-21 08:15:12
【问题描述】:

我正在尝试连接到通过 mysql_workbench 在 linux 机器上创建的 sql 数据库。我目前使用文本编辑器通过终端进行编码,因为这让我感觉很舒服。

我的DatabaseConnection类有如下代码,大部分是用System.out.println的来尝试查找问题原因:

final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
final String DB_URL = "jdbc:mysql://localhost:3306/mydb";

final String user = "root";
final String pass = "pass";

Connection connection;
Statement statement;

public DatabaseConnection(){

}

public void connect(){
    System.out.println("Entering method");
    try {
        System.out.println("Attempting to load driver");
        Class.forName(JDBC_DRIVER); 
        System.out.println("Driver Loaded");        
        connection = DriverManager.getConnection(DB_URL, user, pass);
        System.out.println("Connection established");
        statement = connection.createStatement();
        System.out.println(" statement made");
        ResultSet resultSet = statement.executeQuery("show databases");
        System.out.println("statement executed");

        while(resultSet.next()){
            System.out.println(resultSet.next());
        }
        System.out.println("finished printing result set");

        statement.close();
    } catch(ClassNotFoundException ex) {
        System.out.println("Error: unable to load driver class!");
        System.exit(1);
    } catch (SQLException sqle) {
        System.out.println("Connection Error");         
        sqle.getErrorCode();
    }

}
}

我还有一个Test 类来测试这个:

class Test {

    public static void main(String[] args){
        DatabaseConnection connection = new DatabaseConnection();
        connection.connect();
    }
}

目前在终端中运行它时,我的命令是:

javac -cp .:/lib/mysql-connector-java-5.1.38-bin.jar Test.java

(在包含 .java 文件的顶层文件夹中,我有一个包含我的 jdbc 驱动程序的 lib 子文件夹)

编译得很好。接下来我使用

运行它
java -cp .:/lib/mysql-connector-java-5.1.38-bin.jar Test

我收到以下错误:

java -cp .:/lib/mysql-connector-java-5.1.38-bin.jar Test
Entering method
Attempting to load driver
Error: unable to load driver class!

所以看起来它没有在Class.forName() 方法中加载驱动程序并且失败了。有人可以帮助解释原因和可能的解决方案吗?

在 mysql_workbench 中,我认为数据库已启动并正在运行,因为我能够在工作台查询命令行中查询它以显示当前为空的数据库和表。

【问题讨论】:

  • 也许尝试在冒号和斜杠之间添加一个句点,例如java -cp .:./lib/ ... ?
  • 谢谢,它已连接。发布作为答案,我会指出你。非常感谢!
  • 附注:不再需要使用Class.forName 来加载 JDBC 驱动程序,Java 会自动将驱动程序加载到类路径中。

标签: java jdbc terminal classpath


【解决方案1】:

Java 无法找到 MySQL JDBC 驱动程序的 JAR 文件,因为 -cp 中的参数

java -cp .:/lib/mysql-connector-java-5.1.38-bin.jar Test

指定两个(冒号分隔的)位置:

  1. .
  2. /lib/mysql-connector-java-5.1.38-bin.jar

第二个位置被解释为绝对路径。要将其解释为 相对路径,它应该以句点 (.) 开头,即,

java -cp .:./lib/mysql-connector-java-5.1.38-bin.jar Test

【讨论】:

    猜你喜欢
    • 2018-04-05
    • 2010-11-13
    • 1970-01-01
    • 1970-01-01
    • 2016-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多