2016-04-01 26 views
2

我试图连接到通过mysql_workbench在linux机器上创建的sql数据库。我目前通过终端使用文本编辑器,因为这就是我觉得舒服代码JDBC驱动程序和终端类路径

我的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中,我认为数据库已启动并正在运行,因为我可以在工作台查询命令行中查询它以显示当前为空的数据库和表。

+0

也许尝试添加结肠和斜线,例如之间的时段'java -cp。:./ lib/...'? –

+0

谢谢,它连接。发布作为答案,我会指出你。非常感谢! – shirafuno

+1

请注意:不再需要使用'Class.forName'来加载JDBC驱动程序,Java会自动将驱动程序加载到类路径中。 –

回答

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