我得到了一个“答案”;操作超时。错误代码=-4499,SQLSTATE=08001“;连接到远程DB2

我得到了一个“答案”;操作超时。错误代码=-4499,SQLSTATE=08001“;连接到远程DB2,db2,Db2,我正在尝试使用IBMType4JDBC驱动程序连接到远程DB2。 以下是我的配置: 服务器: Windows7专业版 db2luwv10.5 db2svceName=50000 TCP/IP通信 客户: OS/x V10.10.3 月蚀火星 IBMDB2JavaType4驱动程序 我的理解是,如果您用Java编写客户机应用程序并使用type 4-pure Java驱动程序,那么客户机不必安装客户机。应用程序将使用DRDA直接连接到远程数据库 下面是我试图访问远程db2的一段代码: pub

我正在尝试使用IBMType4JDBC驱动程序连接到远程DB2。 以下是我的配置:

服务器:

  • Windows7专业版
  • db2luwv10.5
  • db2svceName=50000
  • TCP/IP通信
客户:

  • OS/x V10.10.3
  • 月蚀火星
  • IBMDB2JavaType4驱动程序
我的理解是,如果您用Java编写客户机应用程序并使用type 4-pure Java驱动程序,那么客户机不必安装客户机。应用程序将使用DRDA直接连接到远程数据库

下面是我试图访问远程db2的一段代码:

public class BlobRetrieval {

    static String databaseDriver;
    static String dbURL;
    static String userName;
    static String password;
    static Connection passConn; 

public static void main(String[] args) {        
    databaseDriver = "com.ibm.db2.jcc.DB2Driver";
    dbURL = "jdbc:db2://192.168.1.81:50000/LOBDB";
    userName = "ace";
    password = "ace";
    try {
        Class.forName(databaseDriver).newInstance();
        System.out.println("register successful");
        Connection connection = DriverManager.getConnection(dbURL, userName, password);
        System.out.println("connection successful");
        passConn = connection;
        PreparedStatement preparedStatement=connection.prepareStatement("SELECT BOOKCOVER FROM BOOKCOVERS WHERE BOOKISBN=?");
        preparedStatement.setString(1, "0738425826");
    }
}
当我执行这些语句时,我得到以下错误:

注册成功 com.ibm.db2.jcc.am.DisconnectNonTransientConnectionException:[jcc][t4][2043][11550][4.19.26]异常 java.net.ConnectException:打开服务器套接字时出错 /端口50000上的192.168.1.81,带有消息:操作超时。 ERRORCODE=-4499,SQLSTATE=08001 位于com.ibm.db2.jcc.am.kd.a(未知源) 位于com.ibm.db2.jcc.am.kd.a(未知源) 位于com.ibm.db2.jcc.t4.ac.a(未知源) com.ibm.db2.jcc.t4.ac(未知来源) 位于com.ibm.db2.jcc.t4.a.b(未知源) 在com.ibm.db2.jcc.t4.b.newAgent上(未知源) 位于com.ibm.db2.jcc.am.Connection.initConnection(未知源) 位于com.ibm.db2.jcc.am.Connection。(未知源) 在com.ibm.db2.jcc.t4.b(未知来源) 位于com.ibm.db2.jcc.DB2SimpleDataSource.getConnection(未知源) 位于com.ibm.db2.jcc.DB2SimpleDataSource.getConnection(未知源) 位于com.ibm.db2.jcc.DB2Driver.connect(未知源) 位于com.ibm.db2.jcc.DB2Driver.connect(未知源) 位于java.sql.DriverManager.getConnection(DriverManager.java:664) 位于java.sql.DriverManager.getConnection(DriverManager.java:247) 位于dbAccessPackage.BlobRetrieval.main(BlobRetrieval.java:30) 原因:java.net.ConnectException:操作超时 位于java.net.PlainSocketImpl.socketConnect(本机方法) 位于java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:345) 位于java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) 位于java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) 位于java.net.socksocketimpl.connect(socksocketimpl.java:392) 位于java.net.Socket.connect(Socket.java:589) 位于com.ibm.db2.jcc.t4.w.run(未知源) 位于java.security.AccessController.doPrivileged(本机方法)


在许多情况下,服务器上的本地防火墙是一个问题。Windows防火墙可能正在阻止传入的请求


您可以检查端口是否打开(防火墙报告的任何阻塞)?DB2服务器的“db2diag.log”(诊断日志文件)中是否有任何活动?作为一个快速测试,您可以从客户机上执行“telnet 192.168.1.81 50000”。如果成功连接,防火墙就不再是问题了。

我也有同样的问题。然后花大约4小时,以下解决方案对我有效:

项目浏览器->服务器->Tomcat v X.X->打开Server.xml

<Connector port="8484" protocol="AJP/1.3" redirectPort="8484 "/>

我使用分配给服务器的相同端口号(即8080或8484)更改端口和重定向端口


希望这能奏效

Windows防火墙。。。?