2014-10-06 88 views
0

我想通過我設置的系統DSN連接到我的MySql數據庫之一。 DSN使用我的SSL證書,用戶名,密碼,端口正確設置,並且數據庫填充DSN數據庫下拉列表並通過「測試」連接。我似乎無法在Java中獲得連接。我花了2天時間瀏覽一些關於Stack的例子,但他們都提到了一個Access數據庫並使用了Java 8中不再可用的JDBC-ODBC橋。我嘗試使用與Jackcess一起使用的UCanAccess,但我沒有得到任何地方。下面的代碼是我在過去幾個小時裏一直在修補的東西。我通常使用PHP連接到MySql數據庫,並以JSON或直接使用JDBC驅動程序接收結果,但對於此項目,兩者都不是真正的選項。有任何想法嗎。我很感激幫助。通過DSN的Java MySql連接

//String username = "<username>"; 
//String password = "<password>"; 
//String database = "<database_name>"; 

try { 
    Class.forName("net.ucanaccess.jdbc.UcanaccessDriver"); 

    //Connect to cllients MySql Database 
    Connection conn = DriverManager.getConnection("jdbc:ucanaccess:" + database); 

    //Call VerifyLabel(<MAC>,<MODEL>); Call provided client 
    CallableStatement cStmt = conn.prepareCall("{CALL verify(?, ?)}"); 

    //MAC 
    cStmt.setString(1, "mac address"); 

    //model    
    cStmt.setString(2, "model"); 

    cStmt.execute(); 

    //Getting results from "Status" column 
    ResultSet rs1 = cStmt.getResultSet(); 

    //Iterate results and print. 
    while (rs1.next()) { 
     System.out.println(rs1.getString("Status")); 
    } 

    //Close connection conn 
    rs1.close(); 

} catch (SQLException ex) { 
    Logger.getLogger(CambiumStoredTest.class.getName()).log(Level.SEVERE, null, ex); 
} catch (ClassNotFoundException ex) { 
    Logger.getLogger(CambiumStoredTest.class.getName()).log(Level.SEVERE, null, ex); 
} 

使用MySQL驅動程序:

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

    Connection conn = DriverManager.getConnection("jdbc:mysql:"+ database); 

也試過:

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

     Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/"+ database); 

誤差MySQL驅動程序:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 
+0

UCanAccess僅用於Access。我不希望它能夠與MySQL一起工作,就像我不希望MySQL JDBC驅動程序能夠與SQL Server數據庫交談一樣。你能否解釋爲什麼使用MySQL JDBC驅動程序不是一個選項? – 2014-10-06 20:17:11

+0

MySQL驅動程序不會創建任何JDBC-ODBC橋連接。您應該首先檢查您想使用哪種類型的驅動程序。正如@LukeWoodward指定的那樣,DSN與ACCESS和Sql Server一起工作。 – 2014-10-06 20:27:23

+0

我最初使用MySql JDBC Driver,但沒有獲得連接。在Visual C中編寫了另一部分應用程序,我們通過在安裝MySql驅動程序後創建一個System DSN來進行設置。此應用程序成功將數據發佈到MySql數據庫。所以,DSN也可以使用MySql。我最初使用MySql JDBC驅動程序,但認爲由於SSL證書,設置DSN會更容易。 – 2014-10-06 20:35:43

回答

1

1)DSN是最常見的ODBC(assocatiated並經常使用MS-Access)。因此所有的鏈接。對於DSN,ODBC是而不是

2)做不是使用Ucanaccess。對於mySQL使用J/Connector

3)確保您可以從命令行與mySQL進行通信。然後專注於獲得一個小的「hello world」JDBC應用程序來連接。你的第二個和第三個例子看起來OK。請務必檢查mySQL日誌是否有任何警告/錯誤。

0

好了,經過整整一天的努力,讓它工作並睡上幾個小時,我終於找到了工作。 UCanAccess和mysql連接器不起作用。最簡單的事情,因爲沒有其他連接到這個客戶端數據庫的方法是可以接受的是推動這個應用程序在Java 7而不是8。這讓我沒有問題的情況下對我的DSN Coo = nnect。我明白這種方法不是最好的解決方案,但它是完美無瑕和高效工作的。另外,我可以使用Connector/J,而不是使用一些裝配好的第三方庫和罐子。謝謝大家試圖幫助我。只要有人遇到這個問題,這就是我的工作方式。

  1. 應用程序下發展在Java 7中 - 不是8
  2. 設置系統DSN

    的Class.forName( 「在sun.jdbc.odbc.JdbcOdbcDriver」);

    //如果在DSN中設置,則不需要提供用戶名或密碼 Connection conn = DriverManager.getConnection(「jdbc:odbc:」+ database);