我有带有ssh-tunnel的sql-BD。我想使用Java连接到该BD
我使用的代码:
Connection con = null;
JSch jsch = new JSch();
int localPort = 1234;
Session session = jsch.getSession(proxyUser, proxyHost, 22);
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.setPassword(proxyPassword);
session.setConfig("PreferredAuthentications", "publickey,keyboard-interactive,password");
session.connect();
session.setPortForwardingL(localPort, proxyHost, 3306);
Properties properties = new Properties();
properties.setProperty("user", user);
properties.setProperty("password", password);
properties.setProperty("useUnicode", "true");
properties.setProperty("characterEncoding", "UTF-8");
Class.forName("com.mysql.jdbc.Driver").newInstance();
con = DriverManager.getConnection(
"jdbc:mysql://" + url + ":3306/" + nameBD + "?autoReconnect=true", properties);
错误行 “无法建立与数据库服务器的连接。尝试重新连接3次。放弃”
执行此错误: “ con = DriverManager.getConnection(...)”
请帮助我
答案 0 :(得分:0)
使用wireshark进行此类调试可能是最好的方法,它可以使您看到实际发生的事情,并迅速找出不正确的地方(tm)。如果您不熟悉该工具,则有很多tutorials可供选择。
我认为大多数情况下,您只需要使事物匹配就可以了:
LocalPort
当前设置为1234
,但是DriverManager.getConnection
正在尝试连接到3306
。url
设置为jsch.getSession
和session.setPortForwardingL
都使用proxyHost
作为目的地:我假设您的主机上有防火墙(这就是为什么您使用ssh),因此尝试在本地连接到外部接口地址也可能被阻止。这意味着session.setPortForwardingL
也可能也是localhost / 127.0.0.1。