我正试图通过我设置的系统DSN连接到我的一个MySql数据库。DSN是用我的SSL证书、用户名、密码、端口正确设置的,数据库填充DSN数据库下拉列表,"测试"连接通过。我似乎无法用Java连接。我花了两天时间浏览了Stack上的一些示例,但它们都引用了Access数据库,并使用了Java8中不再可用的JDBC-ODBC桥。我试着将UCanAccess与Jackess一起使用,但我在哪里都找不到。下面的代码是我在过去几个小时里一直在修改的。我通常用PHP连接到MySql数据库,并以JSON或直接用JDBC驱动程序接收结果,但对于这个项目来说,两者都不是真正的选项。任何想法。我很感激你的帮助。
//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
1)DSN最常见的关联是ODBC(通常与MS Access关联)。因此,所有的联系。ODBC不是DSN所必需的。
2) 不要使用Ucanaccess。对mySQL使用J/Connector。
3) 请确保您可以从命令行与mySQL进行通信。然后集中精力让一个小型的"helloworld"JDBC应用程序进行连接。第二个和第三个示例看起来不错。请务必检查mySQL日志中是否有任何警告/错误。
经过一整天的努力和几个小时的睡眠,我终于开始工作了。UCanAccess和mysql连接器无法工作。由于没有其他连接到此客户端数据库的方法是可接受的,因此最简单的事情就是用Java 7而不是8来推送此应用程序。这使我能够毫无问题地连接到DSN。我知道这种方法不是最好的解决方案,但它是完美有效的。此外,我可以使用Connector/J,而不是使用一些组装好的第三方libs和jar。感谢所有试图帮助我的人。万一其他人遇到这个问题,我就是这样做的。
- 用Java 7而不是8开发应用程序
-
设置系统DSN
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//如果是在DSN中设置的,则无需提供用户名或密码Connection conn=DriverManager.getConnection("jdbc:odbc:"+数据库);