【发布时间】:2020-07-10 15:38:41
【问题描述】:
我尝试在 Java 中连接到 Oracle DB,但我遇到了错误,我搜索了很多次我没有找到对我有帮助的东西。
当我尝试使用 SQL 开发人员连接时,它成功了。
所以我尝试编写 java 代码来访问它成功连接到 SSH 的数据库,但在到达 conn = DriverManager.getConnection 时遇到错误:
“java.sql.SQLException:Io 异常:Oracle 错误 ORA-12650”
这是我的功能
public static Connection sshTunel() {
String sshHost = "sshHost";
String sshuser = "sshUser";
String SshKeyFilepath =
"pathOfKey";
Session session;
int localPort = 22;
String remoteHost = "HostIp";
int remotePort = 1521;
String usr = "DB user";
String pwd = "DB pass";
try {
java.util.Properties config = new java.util.Properties();
JSch jsch = new JSch();
session = jsch.getSession(sshuser, sshHost, 22);
jsch.addIdentity(SshKeyFilepath, "ssh Pass");
config.put("StrictHostKeyChecking", "no");
config.put("Compression", "yes");
config.put("ConnectionAttempts", "2");
session.setConfig(config);
session.connect();
System.out.println("SSH Connected ...");
int assinged_port =
session.setPortForwardingL(localPort, remoteHost, remotePort);
System.out.println("localhost:" + assinged_port + " -> " +
remoteHost + ":" + remotePort);
System.out.println("Port Forwarded ...");
try {
Class.forName("oracle.jdbc.pool.OracleDataSource");
conn =
DriverManager.getConnection("jdbc:oracle:thin:@remoteHost:1521/SID",
"DB User", "DB Pass");
} catch (SQLException ex) {
ex.printStackTrace();
System.out.println("Error in connection");
}
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
【问题讨论】:
-
你为什么连接到
remoteHost:1521而不是localhost:<assigned_port>?你说 SQL Developer 连接我有点困惑 - 是直接连接还是也通过 SSH? -
如果要通过隧道连接数据库,需要使用 localhost 和本地分配的端口连接到 Oracle
-
亲爱的我试过 DriverManager.getConnection("jdbc:oracle:thin:@localhost:22/SID", "DB User", "DB Pass") DriverManager.getConnection("jdbc:oracle:thin :@localhost:8080/SID", "DB User", "DB Pass") 同样的错误,请问我该如何处理。
-
@AlexPoole 究竟assigned_port 是什么?我应该将本地主机传递给 int assinged_port = session.setPortForwardingL
-
抱歉,我听不懂。如果您连接到 remoteHost:1521,则不使用 SSH。如果相关,请编辑您的问题以添加 SQL Developer 连接详细信息以及您如何为此设置 SSH。对于您的 Java 代码,我想知道您是否可能需要调用
setPortForwardingLbeforeconnect?