我正在使用Java预处理语句在PostgreSQL数据库中执行存储过程。像这样:
String sql = "select testFkt(?,?,?,?,?)";
try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
preparedStatement.setInt(1, a
preparedStatement.setInt(2, b);
preparedStatement.setInt(3, c);
preparedStatement.setByte(4, d);
preparedStatement.setString(5, "test");
try (ResultSet result = preparedStatement.executeQuery()) {
}
}
存储过程返回结果,但我对结果不感兴趣。
我是否还必须使用ResultSet
(和试用),还是只能使用preparedStatement.executeQuery()
?
我担心有一个流或类似的东西打开,因为存储过程返回结果,如果我没有使用ResultSet
,则不会关闭此流。
答案 0 :(得分:1)
如果我理解了您的问题,那么您可以使用PreparedStatmenet.execute()
代替(这样您就不会获得ResultSet
)。
即改变此
try (ResultSet result = preparedStatement.executeQuery()) {
}
到
preparedStatement.execute();
答案 1 :(得分:1)
当生成它的Statement对象关闭时,ResultSet对象会自动关闭。因此,您只需关闭语句即可关闭ResultSet Stream。
访问http://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html了解详情
虽然如果您的要求是执行存储过程,您可以使用JDBC Callable Statement API
访问http://docs.oracle.com/javase/7/docs/api/java/sql/CallableStatement.html了解详情
以下示例:
Connection dbConnection = null;
CallableStatement callableStatement = null;
String storedProc = "{call storedProc (?,?)}";
try{
dbConnection = getDBConnection();
callableStatement = dbConnection.prepareCall(storedProc);
callableStatement.setInt(1, 1);
callableStatement.registerOutParameter(2, java.sql.Types.DATE);
callableStatement.executeUpdate();
} catch(SQLException e) {
//handle exception
} finally {
if (callableStatement != null) {
callableStatement.close();
}
if (dbConnection != null) {
dbConnection.close();
}
}
答案 2 :(得分:0)
是的,您仍然希望关闭结果集。