最近用到了通过SSH连接数据库,记录一下实现过程
代码实现 :
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.sql.*;
import java.util.*;
public class InsertDatebase{
private static int localPort = 3308; //本地转发端口
private static String remoteHost = "xxx.xxx.xx.xx";//远程MYSQL服务器
private static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
private static final boolean needSSH = true; //是否需要SSH转发
//数据库配置
private static final String DB_URL = "jdbc:mysql://localhost:" + localPort + "/xxx";
private static final String USER = "xxx";
private static final String PASS = "xxx";
private static Session session;
private Connection conn = null;
private static Statement stmt = null;
private ResultSet rs = null;
//数据库连接
public void getConnection(){
try{
if(needSSH){ //开启SSH
if(session == null || !session.isConnected()){
startSSH();
}
}
// 注册 JDBC 驱动
Class.forName(JDBC_DRIVER);
// 打开链接
if (conn == null || conn.isClosed()){
conn = DriverManager.getConnection(DB_URL, USER, PASS);
}
if (stmt == null || stmt.isClosed()){
stmt = conn.createStatement();//或者用PreparedStatement方法
}
}catch(Exception e){
e.printStackTrace();
}
}
//SSH 本地转发
private void startSSH() {
//SSH连接用户名
String sshUser = "xxx";
//SSH连接密码
String sshPassword = "xxx";
//SSH服务器
String sshHost = "xx.xx.xx.xx";
//SSH访问端口
int sshPort = xx;
JSch jsch = new JSch();
if (session == null || !session.isConnected()){
session = jsch.getSession(sshUser, sshHost, sshPort);
}
session.setPassword(sshPassword);
// 设置第一次登陆的时候提示,可选值:(ask | yes | no)
session.setConfig("StrictHostKeyChecking", "no");
session.connect();
// 打印SSH服务器版本信息
System.out.println(session.getServerVersion());
// 设置SSH本地端口转发,本地转发到远程
int assinged_port = session.setPortForwardingL(localPort, remoteHost, remotePort);
}
public static void main(String[] args) throws Exception
{
//具体调用。。。。
String sqlQuery = "select * from xxx ";
stmt.executeQuery(sqlQuery);
}
}