我正在尝试使用IBM Type 4 JDBC驱动程序连接到远程DB2。 这是我的配置:
服务器:
客户端:
我的理解是,如果您使用Java编写客户端应用程序并使用类型4纯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:打开服务器的套接字时出错 端口50,000上的/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_(未知来源) at com.ibm.db2.jcc.am.Connection.initConnection(Unknown Source) 在com.ibm.db2.jcc.am.Connection。(未知来源) 在com.ibm.db2.jcc.t4.b.(未知来源) at com.ibm.db2.jcc.DB2SimpleDataSource.getConnection(Unknown Source) at com.ibm.db2.jcc.DB2SimpleDataSource.getConnection(Unknown Source) 在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:操作超时 at java.net.PlainSocketImpl.socketConnect(Native Method) 在java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:345) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) 在java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) 在java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 在java.net.Socket.connect(Socket.java:589) 在com.ibm.db2.jcc.t4.w.run(未知来源) at java.security.AccessController.doPrivileged(Native Method)
答案 0 :(得分:1)
在许多情况下,服务器上的本地防火墙是个问题。 Windows防火墙可能会阻止传入的请求。
您可以检查端口是否已打开(防火墙报告的阻止)?是否在" db2diag.log"中看到了任何活动。 DB2服务器的(诊断日志文件)?作为一个快速测试,你可以做一个" telnet 192.168.1.81 50000"从您的客户端机器。如果成功并且您有连接,则防火墙不再是问题。
答案 1 :(得分:0)
我有同样的问题。并花了大约4个小时,然后下面的解决方案为我工作:
Project Explorer - >服务器 - > Tomcat v X.X - >打开server.xml
<Connector port="8484" protocol="AJP/1.3" redirectPort="8484 "/>
我使用我分配给服务器的相同端口号(即8080或8484)更改我的端口和redirectPort。
希望这会奏效。