从执行存储过程的 NamedParameterJdbcTemplate 获取 ResultSet
Get ResultSet from NamedParameterJdbcTemplate executing a stored procedure
我正在尝试使用 NamedParameterJdbcTemplate 从执行存储过程中获取结果集。我已将我的存储过程设置为 return 以 id 作为列名的值。不幸的是,我发现执行存储过程的方式似乎调用了两次执行,然后立即关闭了结果集。我需要找到一种获取结果集的方法。
MapSqlParameterSource params = params("intSiteId",job.getSite().getId())
.addValue("dtmStart", job.getStartDate() == null ? null : dateTimeString(job.getStartDate()))
.addValue("dtmEnd", job.getEndDate() == null ? null : dateTimeString(job.getEndDate()))
.addValue("intManualFl",job.isManual());
ResultSet result = getTemplate().execute(getSql("create",params), params, new PreparedStatementCallback<ResultSet>(){
@Override
public ResultSet doInPreparedStatement(PreparedStatement ps)
throws SQLException, DataAccessException {
return ps.executeQuery();
}
});
return result.getInt("id");
我通过 return 整数列表而不是结果集解决了这个问题。这使我能够在结果集关闭之前获取数据并 return 它。我在这里找到了这个解决方案:http://www.java2s.com/Code/Java/Spring/SelectStatementWithPreparedStatementCallback.htm
List<Integer> result = getTemplate().execute(getSql("create"), params, new PreparedStatementCallback<List<Integer>>(){
@Override
public List<Integer> doInPreparedStatement(PreparedStatement ps)
throws SQLException, DataAccessException {
ResultSet rs = ps.executeQuery();
List<Integer> id = new LinkedList<Integer>();
while (rs.next())
id.add(rs.getInt(1));
rs.close();
return id;
}
});
return result.get(0);
我正在尝试使用 NamedParameterJdbcTemplate 从执行存储过程中获取结果集。我已将我的存储过程设置为 return 以 id 作为列名的值。不幸的是,我发现执行存储过程的方式似乎调用了两次执行,然后立即关闭了结果集。我需要找到一种获取结果集的方法。
MapSqlParameterSource params = params("intSiteId",job.getSite().getId())
.addValue("dtmStart", job.getStartDate() == null ? null : dateTimeString(job.getStartDate()))
.addValue("dtmEnd", job.getEndDate() == null ? null : dateTimeString(job.getEndDate()))
.addValue("intManualFl",job.isManual());
ResultSet result = getTemplate().execute(getSql("create",params), params, new PreparedStatementCallback<ResultSet>(){
@Override
public ResultSet doInPreparedStatement(PreparedStatement ps)
throws SQLException, DataAccessException {
return ps.executeQuery();
}
});
return result.getInt("id");
我通过 return 整数列表而不是结果集解决了这个问题。这使我能够在结果集关闭之前获取数据并 return 它。我在这里找到了这个解决方案:http://www.java2s.com/Code/Java/Spring/SelectStatementWithPreparedStatementCallback.htm
List<Integer> result = getTemplate().execute(getSql("create"), params, new PreparedStatementCallback<List<Integer>>(){
@Override
public List<Integer> doInPreparedStatement(PreparedStatement ps)
throws SQLException, DataAccessException {
ResultSet rs = ps.executeQuery();
List<Integer> id = new LinkedList<Integer>();
while (rs.next())
id.add(rs.getInt(1));
rs.close();
return id;
}
});
return result.get(0);