Ste*_*eod 13 java spring jdbctemplate
JDBC java.sql.Statement类有一个cancel()方法.这可以在另一个线程中调用以取消当前运行的语句.
如何使用Spring实现这一目标?我无法找到在运行查询时获取对语句的引用的方法.我也找不到类似取消的方法.
这是一些示例代码.想象一下这需要10秒才能执行,有时根据用户的要求,我想取消它:
final int i = simpleJdbcTemplate.queryForInt("select max(gameid) from game");
Run Code Online (Sandbox Code Playgroud)
我如何修改这个,所以我有一个java.sql.Statement对象的引用?
its*_*dok 12
让我简化oxbow_lakes的答案:您可以使用PreparedStatementCreator查询方法的变体来获取对语句的访问权限.
所以你的代码:
final int i = simpleJdbcTemplate.queryForInt("select max(gameid) from game");
Run Code Online (Sandbox Code Playgroud)
应该变成:
final PreparedStatement[] stmt = new PreparedStatement[1];
final int i = (Integer)getJdbcTemplate().query(new PreparedStatementCreator() {
public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
stmt[0] = connection.prepareStatement("select max(gameid) from game");
return stmt[0];
}
}, new ResultSetExtractor() {
public Object extractData(ResultSet resultSet) throws SQLException, DataAccessException {
return resultSet.getString(1);
}
});
Run Code Online (Sandbox Code Playgroud)
现在取消你可以打电话
stmt[0].cancel()
Run Code Online (Sandbox Code Playgroud)
您可能希望stmt在实际运行查询之前提供对其他线程的引用,或者只是将其存储为成员变量.否则,你真的无法取消任何东西......
| 归档时间: |
|
| 查看次数: |
8549 次 |
| 最近记录: |