Jdbc 使用SQuirreL“连接到IBM DB2”;Reply.fill()。信息:数据不足。错误代码=-4499,SQLSTATE=08001“;
现在,我已经尝试了两天使用SQuirreL连接到外部DB2数据库。我总是会出错:Jdbc 使用SQuirreL“连接到IBM DB2”;Reply.fill()。信息:数据不足。错误代码=-4499,SQLSTATE=08001“;,jdbc,db2,squirrel-sql,Jdbc,Db2,Squirrel Sql,现在,我已经尝试了两天使用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: Ins
[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
我使用的是IBMDB2UniversalJDBC驱动程序v9.7FP5。我也试过v9.5
一件事是DB2是用油灰挖洞的。服务器使用IBMDB2V7.1运行linux。我正在使用Win7x64
我在网上浏览了很多论坛主题,都涉及到了这个错误,但没有一个真正对我有用。(即)
首先,我认为这可能与未正确挖掘的端口有关。但是我从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)
com.ibm.db2.jcc.am.io:[jcc][t4][2030][11211][3.58.82]通信错误
在连接的基础套接字、套接字输入的操作过程中发生
流,或套接字输出流。错误位置:Reply.fill()。信息:
数据不足。ERRORCODE=-4499,SQLSTATE=08001
com.ibm.db2.jcc.am.ed.a(ed.java:319)
com.ibm.db2.jcc.t4.a.a(a.java:416)
com.ibm.db2.jcc.t4.a.a(a.java:411)
com.ibm.db2.jcc.t4.cb.b(cb.java:227)
com.ibm.db2.jcc.t4.cb.c(cb.java:249)
com.ibm.db2.jcc.t4.cb.c(cb.java:360)
com.ibm.db2.jcc.t4.cb.v(cb.java:1145)
位于com.ibm.db2.jcc.t4.db.a(db.java:42)
com.ibm.db2.jcc.t4.b.m(b.java:1238)
位于com.ibm.db2.jcc.t4.b.b(b.java:1112)
位于com.ibm.db2.jcc.t4.b.c(b.java:700)
位于com.ibm.db2.jcc.t4.b.b(b.java:686)
com.ibm.db2.jcc.t4.b.a(b.java:367)
com.ibm.db2.jcc.t4.b.(b.java:307)
位于com.ibm.db2.jcc.DB2SimpleDataSource.getConnection(DB2SimpleDataSource.java:214)
com.ibm.db2.jcc.DB2Driver.connect(DB2Driver.java:456)
我最好的猜测是JDBC通用驱动程序与DB2V7.1不向后兼容
它在另一台32位XP的开发机器(同事)上工作。我曾尝试将其应用于不同的32位XP,但结果是相同的
至少有人能描述一下这种异常现象的根源吗
编辑
这不能是防火墙或隧道错误。使用telnet成功打开了正确端口的隧道。您需要找到并使用DB2 7.2或DB2 7.1客户机代码(也称为DB2客户机应用程序启用码)。在DB28.1之前,IBM使用一种不同的、依赖于平台的协议,称为DB2RA,用于客户机和服务器之间的通信。DB28.1切换到标准DRDA协议。在特定配置中,DB28.x客户机可以与DB27.x服务器通信
或者,如果您使用的是Java应用程序,则可以尝试查找/使用类型3 JDBC驱动程序(COM.ibm.db2.JDBC.net.DB2Driver)。这个驱动程序是无客户端的(它有一个三层架构,因为它需要一个所谓的“JDBCApplet服务器”要在数据库服务器上运行。您可以通过查找名为
db2jd
的进程来查看它是否在linux设备上运行。通常,此进程将显示为,例如,db2jd 6789
,其中6789是小程序服务器正在侦听的端口号。如果您没有看到此进程,则可以启动它(作为DB2实例所有者)执行db2jstrt
命令。另一种可能性:您可能需要重新启动计算机。在我的情况下,这对我来说是有效的。我在安装了DB2 10.5的特殊版本后出现了此错误
- 要获得更多诊断信息,可以使用以下命令获取IBM JDBC驱动程序版本:
java com.IBM.db2.jcc.DB2Jcc-version
- 最后是这个