2014-10-06 82 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);