我有一个使用NamedParameterJdbcTemplate执行查询的应用程序。然后使用ResultSet.next()逐行解析resultSet。
现在在某些情况下,在多线程场景中,这是错误的。结果集返回错误的值。当我在SQLDeveloper中执行相同的查询时,我看到了正确的值。不确定这背后的问题是什么。
while (rs.next()) {
count++;
long dbKy = rs.getLong("DBKY");
pAttrs = map.get(dbKy );
if (pAttrs== null) {
pAttrs= new HashMap<String, String>();
map.put(dbKy , pAttrs);
}
log.info( "PrintingResultSet!!::"+rs.getLong("DBKY")
+"::"+rs.getString(ATTR_NAME)
+"::"+rs.getString(ATTR_VAL)
+"::"+rs.getString(Constants.VAL));
pAttrs.put(rs.getString(ATTR_NAME),rs.getString(ATTR_VAL));
}
编辑:此代码位于SpringBoot应用程序的repo层中。多线程是,当同时发送多个请求时会发生此问题。我在我的日志中打印了Thread ID,它确认只在多线程场景中才会发生这种情况。
实际返回的值是某个其他行的值。
答案 0 :(得分:0)
当您尝试显示结果集时,您会看到什么值(错误的值)。如果您看到一些未知的文本或符号,则可能是“ encoding ”问题。我建议你参考一下如何在服务层上编码像某些特殊字符/符号这样的值,因为毫无疑问你可以通过使用查询来查看数据库中的数据,但是如果该数据包含一些特殊的字符/符号那么需要编码“UTF-8”。
<强>谢谢!强>