使用 Java 通过 SSH 连接到远程 MySQL 数据库
2022-08-31 20:34:53
如何通过 Java 应用程序通过 SSH 连接到远程 MySQL 数据库?小代码示例对我很有帮助,我很感激。
如何通过 Java 应用程序通过 SSH 连接到远程 MySQL 数据库?小代码示例对我很有帮助,我很感激。
我的理解是,您希望访问在远程计算机上运行的mysql服务器,并通过SSH隧道监听端口3306。
要使用命令行 ssh 客户端创建从本地计算机上的端口 1234 到远程计算机上的端口 3306 的此类隧道,请在本地计算机上键入以下命令:
ssh -L 1234:localhost:3306 mysql.server.remote
要从Java中做同样的事情,你可以使用JSch,SSH2的Java实现。从其网站:
JSch允许您连接到sshd服务器并使用端口转发,X11转发,文件传输等,并且可以将其功能集成到您自己的Java程序中。JSch在BSD风格许可证下获得许可。
例如,请查看PortForwardingL.java
。连接会话后,使用类似连接 URL 的内容创建与 MySQL 的 JDBC 连接。jdbc:mysql://localhost:1234/[database]
我的详细代码如下:
package mypackage;
import java.sql.*;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
public class UpdateMySqlDatabase {
static int lport;
static String rhost;
static int rport;
public static void go(){
String user = "ripon";
String password = "wasim";
String host = "myhost.ripon.wasim";
int port=22;
try
{
JSch jsch = new JSch();
Session session = jsch.getSession(user, host, port);
lport = 4321;
rhost = "localhost";
rport = 3306;
session.setPassword(password);
session.setConfig("StrictHostKeyChecking", "no");
System.out.println("Establishing Connection...");
session.connect();
int assinged_port=session.setPortForwardingL(lport, rhost, rport);
System.out.println("localhost:"+assinged_port+" -> "+rhost+":"+rport);
}
catch(Exception e){System.err.print(e);}
}
public static void main(String[] args) {
try{
go();
} catch(Exception ex){
ex.printStackTrace();
}
System.out.println("An example for updating a Row from Mysql Database!");
Connection con = null;
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://" + rhost +":" + lport + "/";
String db = "testDB";
String dbUser = "wasim";
String dbPasswd = "riponalwasim123";
try{
Class.forName(driver);
con = DriverManager.getConnection(url+db, dbUser, dbPasswd);
try{
Statement st = con.createStatement();
String sql = "UPDATE MyTableName " +
"SET email = 'ripon.wasim@smile.com' WHERE email='peace@happy.com'";
int update = st.executeUpdate(sql);
if(update >= 1){
System.out.println("Row is updated.");
}
else{
System.out.println("Row is not updated.");
}
}
catch (SQLException s){
System.out.println("SQL statement is not executed!");
}
}
catch (Exception e){
e.printStackTrace();
}
}
}