Java ResultSet 为某些列提供返回错误的值



我有一个使用 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"。

谢谢!

最新更新