所以我创建了一个到我的远程MySQL服务器的SSH连接。我能通过shell做ssh -v user @ host,所以我知道我的主机ip,用户名和密码是正确的。
这是我用来做的代码:
int lport=5656;
String rhost="host";
String host="host";
int rport=3306;
String user="root";
String password="pass";
String dbuserName = "root";
String dbpassword = "pass";
String url = "jdbc:mysql://localhost:"+lport+"/lg4";
String driverName="com.mysql.cj.jdbc.Driver";
Connection conn = null;
Session session= null;
try{
//Set StrictHostKeyChecking property to no to avoid UnknownHostKey issue
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
JSch jsch = new JSch();
session=jsch.getSession(user, host, 22);
session.setPassword(password);
session.setConfig(config);
session.connect();
System.out.println("Connected");
int assinged_port=session.setPortForwardingL(lport, rhost, rport);
System.out.println("localhost:"+assinged_port+" -> "+rhost+":"+rport);
System.out.println("Port Forwarded");
//mysql database connectivity
Class.forName(driverName).newInstance();
conn = DriverManager.getConnection (url, dbuserName, dbpassword);
System.out.println ("Database connection established");
System.out.println("DONE");
}catch(Exception e){
e.printStackTrace();
}finally{
if(conn != null && !conn.isClosed()){
System.out.println("Closing Database Connection");
conn.close();
}
if(session !=null && session.isConnected()){
System.out.println("Closing SSH Connection");
session.disconnect();
}
}
}
控制台播放了这个:
System.out.println中的“Port Forwarded”(“Port Forwarded”);
所以我知道它确实是前进的,问题出在这一行:
conn = DriverManager.getConnection (url, dbuserName, dbpassword);
错误是:
CommunicationsException:通讯链接失败
所以我开始尝试为这个问题找到解决方案,我遇到了一个可能的解决方案和问题列表:
好的,所以我开始一个接一个地缩小问题范围:
我可以做错什么?
答案 0 :(得分:0)
请用你的网址中的ip替换localhost。这可能会有所帮助
比如String url = "jdbc:mysql://yourIp:"+lport+"/lg4";