我正在尝试编写一些从我的个人计算机连接到远程数据库的Java代码。我现在可以使用私钥/公钥授权ssh到这些机器。我可以通过创建SSH隧道(使用Putty)来访问这些机器的GUI。
我认为问题不在于我的代码,因为我可以使用MySQL Workbench创建数据库并且可以成功查询数据库。尝试访问数据库时,我使用与GUI相同的隧道地址。所以我的问题归结为我应该如何连接到数据库?任何人都可以对我的问题有所了解吗?我的代码发布在下面。
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.DriverManager;
import java.sql.SQLException;
public class SQLConnector {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//Connection URL Syntax: "jdbc:mysql://ipaddress:portnumber/db_name"
String dbUrl = "jdbc:mysql://localhost:9092/db";
//Database Username
String username = "root";
//Database Password
String password = "root";
//Query to Execute
String query = "select * from employee;";
//Load mysql jdbc driver
Class.forName("com.mysql.jdbc.Driver");
//Create Connection to DB
Connection con = DriverManager.getConnection(dbUrl,username,password);
//Create Statement Object
Statement stmt = con.createStatement();
// Execute the SQL Query. Store results in ResultSet
ResultSet rs= stmt.executeQuery(query);
// While Loop to iterate through all data and print results
while (rs.next()){
String myName = rs.getString(1);
String myAge = rs.getString(2);
System. out.println(myName+" "+myAge);
}
// closing DB Connection
con.close();
}
}
我得到的错误是:
Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
答案 0 :(得分:1)
这应该是评论,但我的声誉不允许评论。我冒昧地猜测服务器网络上的端口是阻塞该端口(你使用的是什么端口)但是允许ssh。什么是此服务器/您可以在何处/可以更改任何防火墙上的设置以允许连接?
答案 1 :(得分:0)
如果我说得对,那么mysql正在侦听你用ssh连接的主机上的端口9092。
然后使用此ssh命令连接:
ssh -L9092:localhost:9092 username@192.168.1.233
它在本地计算机上创建一个tcp侦听套接字,并将连接到本地计算机上的端口9092的任何连接隧道连接到远程计算机上的端口9092
编辑:
我错过了你正在使用腻子。然后打开连接设置对话框,然后浏览到ssh
并找到port forwarding
。符号几乎相同:本地端口,远程站点的某个ip:端口:here您可以找到带截图的分步指南