我正在尝试通过我设置的系统DSN连接到我的一个MySql数据库。使用我的SSL证书,用户名,密码,端口正确设置DSN,并且数据库填充DSN数据库下拉列表并且"测试"连接通行证。我似乎无法在Java中获得连接。我花了两天时间查看Stack上的一些示例,但它们都引用了Access数据库并使用了Java-8中不再提供的JDBC-ODBC桥。我尝试使用UCanAccess和Jackcess,但我没有在哪里。下面的代码是我过去几个小时一直在修修补补的。我通常使用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
答案 0 :(得分:1)
1)DSN最常与ODBC(通常与MS-Access)相关联。因此所有的链接。 ODBC是 NOT DSN所必需的。
2) NOT 使用Ucanaccess。将J/Connector用于mySQL。
3)确保您可以从命令行与mySQL通信。然后专注于获得一个小的“hello world”JDBC应用程序进行连接。你的第二和第三个例子看起来不错。请务必检查mySQL日志中是否有任何警告/错误。
答案 1 :(得分:0)
好吧,经过一整天试图让它上班并在上面睡了几个小时后,我终于开始工作了。 UCanAccess和mysql-connector不起作用。最简单的事情是因为没有其他连接到这个客户端数据库的方法是可以接受的,就是在Java 7而不是8中推送这个应用程序。这样我就可以毫无问题地将Coo = nnect连接到我的DSN。我知道这种方法不是最好的解决方案,但它是完美无缺的工作方式。此外,我可以使用Connector / J,而不是使用一些装配好的第三方库和jar。谢谢大家试图帮助我。只是因为其他人遇到了这个问题,这就是我的工作方式。
设置系统DSN
的Class.forName(#34&;在sun.jdbc.odbc.JdbcOdbcDriver&#34);
//如果在DSN中设置了用户名或密码,则无需提供 Connection conn = DriverManager.getConnection(&#34; jdbc:odbc:&#34; + database);