我有以下一些代码从Oracle表中读取数据(注意:这在Jdk 1.4.2上运行)
ResultSet message = messageStatement.executeQuery(getMsgSql);
String messageData = message.getString("MESSAGE_DATA");
MESSAGE_DATA列中的数据包含文本,但也包含分隔消息中数据元素的控制字符(即(char)31,(char)29)和(char)28)。
我发现的是,由于某种原因,message.getString()有时会截断消息。我可以读取大部分消息,但其中一些消息被截断。我应该使用不同的方法读取数据吗?如果是这样的话?
我曾尝试使用sqlplus来查看数据库中的数据,并且它只是被message.getString()方法截断。我在尝试输出结果时看到了这一点,即System.out.println(message.getString())。
由于
我使用Oracle中的length()函数运行sql查询,而length(“MESSAGE_DATA”)返回2032而在java message.getString(1).length()中返回2000.我不知道为什么会发生这种情况。
好的,我可能会想到一些事情。我刚刚尝试了更新版本的JDBC驱动程序,它似乎正在运行。正在使用的驱动程序是为jdk1.4交付而交付的旧版本。有谁知道为什么会这样?而且,使用较新版本的jdbc驱动程序会产生任何影响,特别是考虑到应用程序在JDK 1.4上运行。 oracle版本是10.1.0.3.0
我不确定这是否有用,但这里是两个JDBC驱动程序的版本。
无效的JDBC驱动程序
===== Database info =====
DatabaseProductName: Oracle
DatabaseProductVersion: Oracle Database 10g Release 10.1.0.3.0 - 64bit Production
===== Driver info =====
DriverName: Oracle JDBC driver
DriverVersion: 8.0.5.2.0
DriverMajorVersion: 8
DriverMinorVersion: 0
运行的JDBC驱动程序
===== Database info =====
DatabaseProductName: Oracle
DatabaseProductVersion: Oracle Database 10g Release 10.1.0.3.0 - 64bit Production
===== Driver info =====
DriverName: Oracle JDBC driver
DriverVersion: 10.2.0.1.0
DriverMajorVersion: 10
DriverMinorVersion: 2
由于
答案 0 :(得分:2)
我的猜测:数据库有一个非默认的字符集。如果Java驱动程序不知道该charset,它将期望默认(无论它是什么),并且解码错误,有时可能截断字符串。