2015-12-11 231 views
1

我搜索了互聯網,試圖找到使用java和JDBC連接到MySQL的解決方案。不幸的是我找到了多個答案,沒有解決我的問題。使用JDBC連接到MySQL

我從MySQL下載了JDBC,並解壓縮文件以查找.jar。我把該.jar在我的C:/ Program Files文件(X86)/的Java/JDK .../JRE/lib/ext目錄文件夾中。我把我的環境變量CLASSPATH(也許CLASSPATH,類路徑??)以下:

%CLASSPATH%;.;C:\Program Files (x86)\Java\jdk1.8.0_65\jre\lib\ext 

我用我由基於各種不同的解決方案,我已經看到了讓這個腳本:

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


public class MySql { 

    public static void main(String[] args) 
    { 
     Connection con = getConnection(); 
     if (con != null) { 
      System.out.println("Connection Made"); 
     } 
     else { 
      System.out.println("Connection not made"); 
     } 
    } 

    private static Connection getConnection() { 


     Connection con = null; 
     try { 
      Class.forName("com.mysql.jdbc"); 
      Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/sakila", "java", "java"); 
      System.out.println("Connection Made"); 

      conn.close(); 

     } 
     catch (SQLException e) 
     { 
      System.out.println(e.getMessage()); 
      System.exit(0); 
     } 
     catch (ClassNotFoundException e) 
     { 
      System.out.println(e.getMessage()); 
      System.exit(0); 
     } 
     return con; 
    } 


} 

它用javac MySql.java編譯。然後當它運行(java MySql)時,我得到com.mysql.jdbc。我讀過,我不需要註冊驅動程序,但是當我刪除Class.forName時,我得到的是'找不到JDBC驅動程序'錯誤。

我無法將問題縮小到兩種: 1)。類路徑沒有正確設置。 2)。不正確的java連接代碼。 3)。無法找到MySQL服務器。

任何幫助,將不勝感激。

編輯 -

我.jar文件放置到桌面以進行測試。更改的系統變量CLASSPATH:

%CLASSPATH%;.;C:\User\User\Desktop\mysql-connector-java-5.1.38-bin.jar 

然後,當我添加了微量的錯誤說法,我得到:

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 
    at java.net.URLClassLoader.findClass<Unkown Source> 
    at java.lang.ClassLoader.loadclass (Unknown source) 
    at sun.misc.Launcher$AppClassLoader.loadclass(Unkown Source) 
    etc. 
    etc. 

編輯2 - 我一直在使用Connect Java to a MySQL database作爲一種資源,沒有的指令花了兩天時間我跟着解決了我的問題。

+0

如果發生異常並且將完整異常粘貼到您的問題中,您可以執行e.printStackTrace()嗎?這個消息本身並沒有太多幫助。 – Jan

+0

您是否在構建路徑中包含JDBC jar? –

+1

現在是時候擺脫把東西扔進「....../jre/lib/ext」的習慣,顯然這個選項[將在Java 9中刪除](https://blogs.oracle.com/java-platform -group /項/ planning_safe_removal_of_under)。 –

回答

3

而不是

System.out.println(e.getMessage()); 

做這個

e.printStackTrace(); 

您將看到的例外是:

java.lang.ClassNotFoundException: com.mysql.jdbc 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:264) 
    at MySql.getConnection(MySql.java:24) 
    at MySql.main(MySql.java:10) 

取出的Class.forName。您可能會遇到訪問被拒絕或其他錯誤,但它會解決ClassNotFoundException。下面是最終編輯的版本,應該工作:

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

public class MySql { 

    public static void main(String[] args) 
    { 
     Connection con = getConnection(); 
     if (con != null) { 
      System.out.println("Connection Made"); 
     } 
     else { 
      System.out.println("Connection not made"); 
     } 
    } 

    private static Connection getConnection() { 
     Connection con = null; 
     try { 
      Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/sakila", "java", "java"); 
      System.out.println("Connection Made"); 
      conn.close(); 
     } 
     catch (SQLException e) 
     { 
      e.printStackTrace(); 
      System.exit(0); 
     } 
     return con; 
    } 
} 
+0

需要Class.forName()來確保驅動程序類由類加載器加載。我不會刪除它。 –

+0

@AndreasVogl - *「需要Class.forName()...」* - 自從JDBC 4(大約Java 6)以來就沒有了。 –

+0

我收到錯誤java.sql.SQLException:找不到適合jdbc的驅動程序:mysql:// localhost:3306/sakila –

0

我認爲你必須添加包括在類路徑中的驅動程序的JAR文件名的路徑。像這樣:

%CLASSPATH%;.;C:\Program Files (x86)\Java\jdk1.8.0_65\jre\lib\ext\mysql-connector-java-xxx.jar 
1

如果你需要的Class.forName(),你必須使用正確的類:

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

但隨着JDBC 4已經變得不再必要。

創建完整的異常堆棧跟蹤,並將結果在這裏搜索 - 最常見的錯誤在這裏已經解決過。

NoSuitableDriverFound是一個非常強表明您的mysql-connector.jar(而不是.zip ....)在您的類路徑中缺少您運行代碼時。

你可以嘗試這樣的:

運行java -cp .;C:\User\User\Desktop\mysql-connector-java-5.1.38-bin.jar MySql

0

如果您的Java 6或以上版本,你不需要Class.formName(...)代碼。 爲了確保一切正常,請按照以下方式編譯和執行代碼。 編譯:

java -cp PATH_TO_DRIVER; YOUR_CLASS.java 

要執行:

java -cp PATH_TO_DRIVER; YOUR_CLASS 

更改YOUR_CLASS到您的類和PATH_TO_DRIVER的路徑名,你下載的MySQL驅動程序。

希望它有幫助!

+0

您不需要將驅動程序放在此位置,它可以位於系統的任何位置,您在編譯或運行代碼時(或兩者)指定位置。我建議你可以避免改變你的classpath環境變量。 – avaz

+0

您只需嘗試一下建議,看看它是否可用來縮小問題出現的位置。也許你的類路徑配置是錯誤的,或者你的代碼或者你放在那個位置的jar不是真正的mysql驅動程序。建議的方式不易出錯,因爲您可以降低對外部系統配置的依賴。 – avaz

+0

我得到了一個java.sql.SQLException:找不到適合jdbc的驅動程序:mysql:// localhost:3306/sakila –

0

試試這個代碼!

public static void main(String[] argv) { 

    try { 
     Class.forName("com.mysql.jdbc.Driver"); 
    } catch (ClassNotFoundException e) { 
     System.out.println("Where is your MySQL JDBC Driver?"); 
     e.printStackTrace(); 
     return; 
    } 

    System.out.println("MySQL JDBC Driver Registered!"); 
    Connection connection = null; 

    try { 
     connection = DriverManager 
     .getConnection("jdbc:mysql://localhost:3306/yourSCHEMAname,"login", "password"); 

    } catch (SQLException e) { 
     System.out.println("Connection Failed! Check output console"); 
     e.printStackTrace(); 
     return; 
    } 

    if (connection != null) { 
     System.out.println("You made it, take control your database now!"); 
    } else { 
     System.out.println("Failed to make connection!"); 
    } 
    } 
}