有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准
https://blog.zysicyj.top
报错内容
org.springframework.dao.TransientDataAccessResourceException: StatementCallback; SQL [SELECT concat_ws(',',id, time, imgname, hex(imgdata), img, results, state, pjwd, orgcode, orgname, tickettype, jsonid, flag, inputtime, analysis, project_id, countfx, type, ticketname) FROM t_json_data where orgCode='O06000000000130' and project_id='PC1692689126000' LIMIT 1500 OFFSET 0]; Operation not allowed for a result set of type ResultSet.TYPE_FORWARD_ONLY.; nested exception is java.sql.SQLException: Operation not allowed for a result set of type ResultSet.TYPE_FORWARD_ONLY.
at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:110)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
at org.springframework.jdbc.core.JdbcTemplate.translateException(JdbcTemplate.java:1443)
原因分析
根据您提供的异常信息,您遇到了一个org.springframework.dao.TransientDataAccessResourceException异常。这个异常是由于在执行SQL查询时出现了问题。
具体来说,异常信息中提到了一个Operation not allowed for a result set of type ResultSet.TYPE_FORWARD_ONLY
错误。这个错误通常是由于使用了ResultSet.TYPE_FORWARD_ONLY类型的结果集,而该类型的结果集只能向前遍历,不支持随机访问。
要解决这个问题,您可以尝试以下几种方法:
- 使用
ResultSet.TYPE_SCROLL_INSENSITIVE或ResultSet.TYPE_SCROLL_SENSITIVE类型的结果集,这些类型的结果集支持随机访问。您可以在执行查询时指定结果集的类型,例如:
Statement statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
ResultSet resultSet = statement.executeQuery("SELECT ...");
- 如果您只需要向前遍历结果集,可以尝试在执行查询时添加
ResultSet.CONCUR_READ_ONLY参数,例如:
Statement statement = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
ResultSet resultSet = statement.executeQuery("SELECT ...");
- 如果您使用的是Spring的JdbcTemplate,可以尝试使用
query方法的重载版本,指定结果集的类型,例如:
List<MyObject> results = jdbcTemplate.query("SELECT ...", new Object[]{}, new BeanPropertyRowMapper<>(MyObject.class), ResultSet.TYPE_SCROLL_INSENSITIVE);
请注意,具体的解决方法可能因您的代码和环境而异。如果以上方法都无法解决问题,建议您检查您的代码逻辑,确保在处理结果集时没有出现其他问题。
希望这些信息对您有所帮助!如果您有任何其他问题,请随时提问。
解决方案
jdbcTemplate.query("SELECT * FROM your_table", new ResultSetExtractor<Void>() {
@Override
public Void extractData(ResultSet rs) throws SQLException, DataAccessException {
// 使用支持滚动的结果集类型
ResultSet scrollableResultSet = jdbcTemplate.getDataSource().getConnection()
.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY)
.executeQuery("SELECT * FROM your_table");
// 在这里执行操作
while (scrollableResultSet.next()) {
// 处理结果集中的数据
}
return null;
}
});
本文是原创文章,采用 CC BY-NC-SA 4.0 协议,完整转载请注明来自 小朱
评论
隐私政策
0/500
滚动到此处加载评论...


