【问题标题】:JDBC reading data from database table that contains control charactersJDBC 从包含控制字符的数据库表中读取数据
【发布时间】:2011-08-16 11:45:14
【问题描述】:

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

谢谢

【问题讨论】:

  • 您确定字符串被“截断”还是只是在终端/控制台上看到控制字符的结果?与数据库中的数据相比,字符串的长度是多少?
  • 是的,我运行一个 sql 查询,在 sqlplus 上,length("MESSAGE_DATA") 返回 2032,而在 java message.getString(1).length() 中返回 2000。
  • 我认为8.x 版本很可能已被取消支持,因此请务必使用 10.x 驱动程序。
  • 版本差异是否会导致任何问题? IE。驱动是 10.2.0.1 但数据库是 10.1?我查看了 oracle 站点 oracle.com/technetwork/database/features/jdbc/index-091264.html 并找不到 10.1..0.3 的驱动程序 他们有 10.1.0.2 也许这是更好的选择?
  • @Ziggy:完全没问题。如果您愿意,您甚至可以使用 11.x 驱动程序。

标签: java oracle jdbc jakarta-ee


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-10-12
    • 2010-11-30
    • 1970-01-01
    • 2021-01-11
    • 1970-01-01
    • 2012-08-17
    • 1970-01-01
    • 1970-01-01
    • 2020-01-13
    相关资源
    最近更新 更多