我现在已经尝试了 2 天来使用 SQuirreL 连接到外部 DB2 数据库。我总是得到错误:
[jcc][t4][2030][11211][3.58.82] A communication error occurred during operations
on the connection's underlying socket, socket input stream, or socket output
stream. Error location: Reply.fill(). Message: Insufficient data.
ERRORCODE=-4499, SQLSTATE=08001
我正在使用 IBM DB2 通用 JDBC 驱动程序 v9.7 FP5。我也试过v9.5。
一件事是 DB2 使用 Putty 建立隧道。服务器运行带有 IBM DB2 v7.1 的 linux。我正在使用 Win7x64。
我在网上浏览了许多涵盖此错误的论坛主题,但没有一个对我真正有用。(即iReport 到 DB2 连接 ERRORCODE=-4499, SQLSTATE=08001)
首先,我认为这可能与未正确隧道化的端口有关。但是我从 Putty 会话 conf 中删除了端口并发生了不同的错误。
堆栈跟踪以及问题:
com.ibm.db2.jcc.am.io: [jcc][t4][2030][11211][3.58.82] A communication error
occurred during operations on the connection's underlying socket, socket input
stream, or socket output stream. Error location: Reply.fill(). Message:
Insufficient data. ERRORCODE=-4499, SQLSTATE=08001
at com.ibm.db2.jcc.am.ed.a(ed.java:319)
at com.ibm.db2.jcc.t4.a.a(a.java:416)
at com.ibm.db2.jcc.t4.a.a(a.java:411)
at com.ibm.db2.jcc.t4.cb.b(cb.java:227)
at com.ibm.db2.jcc.t4.cb.c(cb.java:249)
at com.ibm.db2.jcc.t4.cb.c(cb.java:360)
at com.ibm.db2.jcc.t4.cb.v(cb.java:1145)
at com.ibm.db2.jcc.t4.db.a(db.java:42)
at com.ibm.db2.jcc.t4.b.m(b.java:1238)
at com.ibm.db2.jcc.t4.b.b(b.java:1112)
at com.ibm.db2.jcc.t4.b.c(b.java:700)
at com.ibm.db2.jcc.t4.b.b(b.java:686)
at com.ibm.db2.jcc.t4.b.a(b.java:367)
at com.ibm.db2.jcc.t4.b.<init>(b.java:307)
at com.ibm.db2.jcc.DB2SimpleDataSource.getConnection(DB2SimpleDataSource.java:214)
at com.ibm.db2.jcc.DB2Driver.connect(DB2Driver.java:456)
我最好的猜测是并且仍然是 JDBC 通用驱动程序不向后兼容 DB2 v7.1。
它可以在具有 32 位 XP 的其他开发机器(同事)上运行。我试图让它在不同的 32 位 XP 上运行,但结果相同。
谁能至少描述一下这种异常的根源?
编辑
http://www.ibm.com/developerworks/forums/thread.jspa?messageID=14779629 这不可能是防火墙或隧道错误。使用 telnet 成功打开隧道以纠正端口。