我正在将连接的创建转换为使用JdbcTemplate类,该类处理资源的创建和释放。尽管相同查询的原始结果集返回了我的记录,但以下所示的一种实现并未返回结果集。我转换了下面的代码
ps = connection.prepareStatement(strQuery, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
ps.setLong(1, getId());
objRs = ps.executeQuery();
到下面显示的那个。我使用StreamingStatementCreator的原因是因为我需要设置ResultSet.TYPE_SCROLL_INSENSITIVE和ResultSet.CONCUR_READ_ONLY。
objRs = (ResultSet) jdbcTemplate.query(new StreamingStatementCreator(strQuery),
new PreparedStatementSetter() {
public void setValues(PreparedStatement preparedStatement) throws SQLException {
preparedStatement.setLong(1, getId());
}
}, new CustomResultSetExtractor());
public class CustomResultSetExtractor implements ResultSetExtractor<ResultSet>{
public ResultSet extractData(ResultSet resultSet) throws SQLException, DataAccessException {
return resultSet;
}
}
我不熟悉这些方法。我试图寻找示例,但也许我遗漏了一些东西,我觉得代码是正确的。第一种情况返回objRs中的值,第二种情况不返回任何值。
方法query(PreparedStatementCreator psc, ResultSetExtractor<T> rse)
不返回ResultSet
。它以ResultSet
作为参数调用第二个参数,并返回由它返回的对象。
因此,您应该在ResultSet
中处理CustomResultSetExtractor
,并作为处理结果返回另一个对象。