java.sql.ResultSet returns 增加列长度后修剪字符串

java.sql.ResultSet returns trimmed string after increasing column length

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

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

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

中检索

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

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

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

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

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