2014-10-02 1 views
3

Я использую подготовленный Java оператор для выполнения хранимой процедуры в базе данных PostgreSQL. Например:Готовая инструкция Java без набора результатов?

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.

+1

Обратите внимание, что иногда (в зависимости от базы данных и особенностей o f хранимой процедуры), вы на самом деле ** нуждаетесь **, чтобы прочитать ** полный набор результатов для хранимой процедуры, чтобы фактически выполнить всю свою работу. –

ответ

1

Если я понимаю ваш вопрос, вы можете использовать вместо этого PreparedStatmenet.execute() (таким образом вы не получите ResultSet).

То есть, изменить

try (ResultSet result = preparedStatement.executeQuery()) { 
} 

в

preparedStatement.execute(); 
0

Да, вы все еще хотите, чтобы результаты были закрыты.

1

Объект ResultSet автоматически закрывается при себе объект, который генерируется его закрывается. Таким образом, вы можете просто закрыть заявление, чтобы закрыть поток ResultSet.

Посетите http://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html для более подробной информации

Хотя, если ваше требование выполнить хранимую процедуру, которую можно использовать JDBC Callable Заявление 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();   
     }   
}