JT400 - JDBC IBMi 机器拒绝连接但在 Windows 机器上工作

JT400 - JDBC connection refused from IBMi machine but working from Windows machine

JT400 - 从 windows 机器连接到 IBMi 机器时,JDBC 连接工作正常。

DriverManager.registerDriver(new com.ibm.as400.access.AS400JDBCDriver());
String sysname = "xxx.xxx.xx.xxx";
String xref = "IBMISQLLIB";
String url = "jdbc:as400://" + sysname + ";translate binary=true;prompt=false;naming=sql;libraries=" + xref;

Connection connection = DriverManager.getConnection(url, "USERNAME", "PASSWORD");
print("Connection created successfully");

但是无法使用相同的代码创建连接 - 当 运行 同一台 IBMi 机器上的代码(通过 'QSH Command Entry' 上的可运​​行 jar)时,错误:

java.sql.SQLException: The application requester cannot establish the connection. (A remote host refused an attempted connect operation. (Connection refused)) at com.ibm.as400.access.JDError.createSQLExceptionSubClass(JDError.java:887) at com.ibm.as400.access.JDError.throwSQLException(JDError.java:610) at com.ibm.as400.access.JDError.throwSQLException(JDError.java:568) at com.ibm.as400.access.AS400JDBCConnectionImpl.setProperties(AS400JDBCConnectionImpl.java:3522) at com.ibm.as400.access.AS400JDBCDriver.prepareConnection(AS400JDBCDriver.java:1430) at com.ibm.as400.access.AS400JDBCDriver.initializeConnection(AS400JDBCDriver.java:1280) at com.ibm.as400.access.AS400JDBCDriver.connect(AS400JDBCDriver.java:403) at java.sql.DriverManager.getConnection(DriverManager.java:675) at java.sql.DriverManager.getConnection(DriverManager.java:258)

知道现在出了什么问题吗??

关于 IBMi 机器的更多详细信息是:

  1. 连接配置文件中使用的用户名没有访问权限问题
  2. IBMi 机器上没有设置防火墙
  3. TCP/IP 配置已按照说明进行验证 - 正在 IBM i 上配置 TCP/IP

数据库主机服务器是否处于活动状态?使用 WRKACTJOB 查看作业名称 QZDASOINIT 是否为 运行.

如果没有,请尝试使用命令 STRHOSTSVR *DATABASE 启动主机服务器。

如果您 运行 来自 QSH 的 jar 文件,您需要确保允许多线程。这可能会把事情搞砸。

相同的代码如果在 PC 上可以正常工作,除非您也可能使用不同版本的 jt400.jar 文件。

尝试使用 localhost 代替系统名称。

甚至写一个小的 Java class 来打开和关闭连接。

问题与默认 TCP/IP 端口有关,该端口未侦听 JDBC 连接请求。

最后通过重启 IBMi 机器解决了问题。

:)