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 INTEGER
、data VARCHAR2(5)
和 last_update TIMESTAMP
列。
我使用 WebLogic 12 服务器上托管的 Java 8 应用程序的主键列(id
列)查询该表。该查询在 Spring Framework 4.2 的 NamedParameterJdbcDaoSupport
类中实现,我通过迭代返回的 java.sql.ResultSet
对象来获取结果。
到目前为止一切顺利。根据查询中提供的 id
值是否存在,我得到 0 或 1 条记录。并且data
和last_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 在增加列长度后返回修剪后的字符串的主要内容,如果未能解决你的问题,请参考以下文章
一次性获取`java.sql.ResultSet`行中的所有值
如何从 java.sql.ResultSet 获取列名列表 [重复]