我有一个使用 NamedParameterJdbcTemplate 执行查询的应用程序。然后使用 ResultSet.next() 逐行解析结果集。
现在,在某些情况下,在多线程方案中,这会出错。结果集返回错误的值。当我在 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应用程序的存储库层中。多线程是,当同时发送多个请求时,会发生此问题。我已经在我的日志中打印了线程 id,它确认这只发生在多线程场景中。
返回的值实际上是其他一些行的值。
尝试显示结果集时看到哪些值(错误值)。如果您看到一些未知的文本或符号,则可能是"编码"问题。我建议您参考如何在服务层上对一些特殊字符/符号等值进行编码,因为毫无疑问,您将能够使用查询查看数据库中的数据,但如果该数据包含一些特殊字符/符号,则需要编码"UTF-8"。
谢谢!