Java JDBC从包含控制字符的数据库表中读取数据

Java JDBC从包含控制字符的数据库表中读取数据,java,oracle,jdbc,jakarta-ee,Java,Oracle,Jdbc,Jakarta Ee,我有以下代码从Oracle表中读取数据(注意:这是在JDK1.4.2上运行的) MESSAGE_data列中的数据包含文本,但也包含分隔消息中数据元素的控制字符(即(char)31、(char)29)和(char)28) 我发现,出于某种原因,message.getString()有时会截断消息。我可以阅读大部分信息,但其中一些被截断了。我应该用不同的方法读取数据吗?如果是,怎么做 我曾尝试使用sqlplus查看数据库中的数据,但数据都在那里,只是被message.getString()方法截断

我有以下代码从Oracle表中读取数据(注意:这是在JDK1.4.2上运行的)

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驱动程序是否有任何影响,特别是考虑到应用程序运行在JDK1.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

谢谢我的猜测:数据库有一个非默认字符集。如果Java驱动程序不知道该字符集,它将使用默认值(不管它是什么),并执行错误的解码,有时可能会截断字符串。

您确定字符串被“截断”了吗,或者您只是在终端/控制台上看到了控制字符的结果?与数据库中的数据相比,字符串的长度是多少?是的,我运行了一个sql查询,在sqlplus上,length(“MESSAGE_data”)返回2032,而在java MESSAGE.getString(1).length()返回2000。我假设版本
8.x
很可能是不受支持的,因此,请务必使用10.x驱动程序。但是版本差异会导致任何问题吗?例如,驱动程序是10.2.0.1,但数据库是10.1?我看了一下oracle站点,找不到10.1..0.3的驱动程序,他们有10.1.0.2,也许这是更好的选择?@Ziggy:没问题。如果您愿意,甚至可以使用11.x驱动程序。
=====  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