java.sql.ResultSet 在增加列长度后返回修剪后的字符串

Posted

技术标签:

【中文标题】java.sql.ResultSet 在增加列长度后返回修剪后的字符串【英文标题】:java.sql.ResultSet returns trimmed string after increasing column length 【发布时间】:2022-01-02 06:31:54 【问题描述】:

我在 Oracle 11g DB 上有一个 alpha 表,其中包含 id INTEGERdata VARCHAR2(5)last_update TIMESTAMP 列。

我使用 WebLogic 12 服务器上托管的 Java 8 应用程序的主键列(id 列)查询该表。该查询在 Spring Framework 4.2 的 NamedParameterJdbcDaoSupport 类中实现,我通过迭代返回的 java.sql.ResultSet 对象来获取结果。

到目前为止一切顺利。根据查询中提供的 id 值是否存在,我得到 0 或 1 条记录。并且datalast_update 列按原样从数据库表中检索。

我不得不使用ALTER TABLE alpha MODIFY data VARCHAR2(6); 语句将data 列的大小增加到6 个字节以满足新要求。我用data 列的6 个字符值和last_update 列的当前时间更新了所有行。当我从任何 SQL 客户端查询表时,我看到 data 列的 6 个字符值以及我更新的正确的 last_update 值。

但 Java 8 应用程序仍会检索 data 列的 5 个字符值。检索到的 last_update 值是我更新的正确值。应用程序中没有长度修整代码,getter 和 setter 都在一个普通的 POJO 中。

我可以在Coderanch 中看到类似的问题,但即使在那里,我也没有看到列出的原因和适当的修复方法。感谢您提供任何帮助。

【问题讨论】:

【参考方案1】:

重启 WebLogic 实例后问题已解决。

看起来像查询缓存列长度使用的PreparedStatement,并且依赖该值来检索data 值。

【讨论】:

以上是关于java.sql.ResultSet 在增加列长度后返回修剪后的字符串的主要内容,如果未能解决你的问题,请参考以下文章

JDBC结果集

如何超时 java.sql.ResultSet

一次性获取`java.sql.ResultSet`行中的所有值

如何从 java.sql.ResultSet 获取列名列表 [重复]

java.sql.ResultSet、CallableStatement、SQLInput 没有通用接口

java.sql.ResultSet.next() 光标常见错误总结分析