通过SSH

时间:2016-05-17 22:15:56

标签: java mysql ssh mysql-workbench

我正在尝试编写一些从我的个人计算机连接到远程数据库的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)

2 个答案:

答案 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您可以找到带截图的分步指南

相关问题