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 服务器上运行
关于 IBMi 机器的更多详细信息是:
- 连接配置文件中使用的用户名没有访问权限问题
- IBMi 机器上没有设置防火墙
- TCP/IP 配置已按照说明进行验证 - 正在 IBM i 上配置 TCP/IP
数据库主机服务器是否处于活动状态?使用 WRKACTJOB 查看作业名称 QZDASOINIT 是否为 运行.
如果没有,请尝试使用命令 STRHOSTSVR *DATABASE 启动主机服务器。
如果您 运行 来自 QSH 的 jar 文件,您需要确保允许多线程。这可能会把事情搞砸。
相同的代码如果在 PC 上可以正常工作,除非您也可能使用不同版本的 jt400.jar 文件。
尝试使用 localhost 代替系统名称。
甚至写一个小的 Java class 来打开和关闭连接。
问题与默认 TCP/IP 端口有关,该端口未侦听 JDBC 连接请求。
最后通过重启 IBMi 机器解决了问题。
:)
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 服务器上运行
关于 IBMi 机器的更多详细信息是:
- 连接配置文件中使用的用户名没有访问权限问题
- IBMi 机器上没有设置防火墙
- TCP/IP 配置已按照说明进行验证 - 正在 IBM i 上配置 TCP/IP
数据库主机服务器是否处于活动状态?使用 WRKACTJOB 查看作业名称 QZDASOINIT 是否为 运行.
如果没有,请尝试使用命令 STRHOSTSVR *DATABASE 启动主机服务器。
如果您 运行 来自 QSH 的 jar 文件,您需要确保允许多线程。这可能会把事情搞砸。
相同的代码如果在 PC 上可以正常工作,除非您也可能使用不同版本的 jt400.jar 文件。
尝试使用 localhost 代替系统名称。
甚至写一个小的 Java class 来打开和关闭连接。
问题与默认 TCP/IP 端口有关,该端口未侦听 JDBC 连接请求。
最后通过重启 IBMi 机器解决了问题。
:)