java.sql.ResultSet returns 增加列长度后修剪字符串
java.sql.ResultSet returns trimmed string after increasing column length
我在 Oracle 11g 数据库上有一个 alpha
table,其中包含 id INTEGER
、data VARCHAR2(5)
和 last_update TIMESTAMP
列。
我使用 WebLogic 12 服务器上托管的 Java 8 应用程序的主键列(id
列)查询 table。该查询是在 Spring Framework 4.2 的 NamedParameterJdbcDaoSupport
class 中实现的,我通过迭代返回的 java.sql.ResultSet
对象来获取结果。
到目前为止一切顺利。根据查询中提供的 id
值的存在与否,我得到 0 条或 1 条记录。 data
和 last_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
值。
我在 Oracle 11g 数据库上有一个 alpha
table,其中包含 id INTEGER
、data VARCHAR2(5)
和 last_update TIMESTAMP
列。
我使用 WebLogic 12 服务器上托管的 Java 8 应用程序的主键列(id
列)查询 table。该查询是在 Spring Framework 4.2 的 NamedParameterJdbcDaoSupport
class 中实现的,我通过迭代返回的 java.sql.ResultSet
对象来获取结果。
到目前为止一切顺利。根据查询中提供的 id
值的存在与否,我得到 0 条或 1 条记录。 data
和 last_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
值。