作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 JSch 在 java 中连接到 postgresql,但出现异常,我无法弄清楚问题出在哪里。我使用了本教程中提供的方法 https://www.journaldev.com/235/java-mysql-ssh-jsch-jdbc
代码及异常如下
public class MySqlConnOverSSH {
public static void main(String[] args) throws SQLException {
int lport = 5656;
String rhost = "192.168.1.1";
int rport = 5432;
String user = "abc";
String password = "abc";
String url = "jdbc:postgresql://localhost:" + lport + "/dbtwitter";
String driverName = "org.postgresql.Driver";
Connection conn = null;
Session session = null;
try {
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
JSch jsch = new JSch();
session = jsch.getSession(user, rhost, 22);
session.setPassword(password);
session.setConfig(config);
session.setConfig("PreferredAuthentications","publickey,keyboard-interactive,password");
session.connect();
System.out.println("Connected");
int assinged_port = session.setPortForwardingL(lport, rhost, rport);
System.out.println("localhost:" + assinged_port + " -> " + rhost + ":" + rport);
System.out.println("Port Forwarded");
//mysql database connectivity
Class.forName(driverName).newInstance();
conn = DriverManager.getConnection(url, user, password);
System.out.println("Database connection established");
System.out.println("DONE");
} catch (Exception e) {
e.printStackTrace();
} finally {
if (conn != null && !conn.isClosed()) {
System.out.println("Closing Database Connection");
conn.close();
}
if (session != null && session.isConnected()) {
System.out.println("Closing SSH Connection");
session.disconnect();
}
}
}
}
我收到以下异常
org.postgresql.util.PSQLException: The connection attempt failed.
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:136)
at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:66)
at org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:125)
at org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:30)
at org.postgresql.jdbc3g.Jdbc3gConnection.<init>(Jdbc3gConnection.java:24)
at org.postgresql.Driver.makeConnection(Driver.java:382)
at org.postgresql.Driver.connect(Driver.java:260)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
at evidenceofvaccine.MySqlConnOverSSH.main(MySqlConnOverSSH.java:54)
Caused by: java.io.EOFException
at org.postgresql.core.PGStream.ReceiveChar(PGStream.java:257)
at org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:253)
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:94)
... 9 more
最佳答案
这可能无法具体解决问题,但我在迁移一些 Java 应用程序时遇到了与 SSH 隧道类似的问题。
SSH 给了我几个问题,我发现创建连接更容易,不是在代码本身中,而是使用控制台/终端创建一个桥接,像这样:
ssh -L localhost:MY_LOCAL_PORT:MY_LOCAL_URL:MY_DB_PORT -N -J MY_LOCAL_USER -i ~/MY_LOCATION/MY_FILE_NAME.pem VM_USER
后来,我使用我的应用程序 localhost:9991
作为我的新连接,然后它按预期工作。我避免使用过于复杂的代码修改我的 Java 应用程序,并且在我看来可以以某种方式重用。
关于java - 使用 SSH 和 Java 连接到 postgresql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48979756/
我正在开发一个 voip 调用应用程序。我需要做的是在接到来电时将 Activity 带到前台。我在应用程序中使用 Twilio,并在收到推送消息时开始调用。 问题是我试图在接到任何电话时显示 Act
我是一名优秀的程序员,十分优秀!