gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 09:49:19 25 4
gpt4 key购买 nike

我有以下代码从 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

谢谢

最佳答案

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

关于java - JDBC 从包含控制字符的数据库表中读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5849158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com