没有结果集的Java预处理语句?

时间:2014-10-02 16:30:02

标签: java postgresql jdbc prepared-statement resultset

我正在使用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,则不会关闭此流。

3 个答案:

答案 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)

是的,您仍然希望关闭结果集。