Вопросы JDBC Result Set для начинающих - PullRequest
2 голосов
/ 27 августа 2010

Новое в использовании JDBC, и мне было интересно, все ли операции выдают набор результатов. Например, я делаю заявления для вставки / обновления базы данных через:

StringBuffer query1 = new StringBuffer("UPDATE table SET col1 = value, WHERE some_col = some_val");
PreparedStatement pstmt1 = con.prepareStatment(query1.toString());
ResultSet rs1 = pstmt1.executeQuery();

Так будет ли этот фрагмент, если он будет выполнен, просто выполнить соответствующее обновление и будет сделано? Или мне нужно каким-то образом обработать набор результатов, чтобы завершить операцию?

Заранее спасибо за помощь.

Ответы [ 3 ]

9 голосов
/ 27 августа 2010

Вы должны использовать PreparedStatement#executeUpdate() вместо executeQuery().Он возвращает int, указывающий количество затронутых строк.

int affectedRows = preparedStatement.executeUpdate();

Тем не менее, создание строки SQL таким способом не является нормальной идиомой.Вы бы предпочли использовать заполнители ? и использовать установщики PreparedStatement для установки значений.

String sql = "UPDATE table SET col1 = ? WHERE some_col = ?";
// ...    
preparedStatement = connection.prepareStatment(sql);
preparedStatement.setString(1, col1);
preparedStatement.setString(2, someCol);
int affectedRows = preparedStatement.executeUpdate();
// ...

См. Также:

1 голос
/ 27 августа 2010

Нет, вам не нужно обрабатывать ResultSet - он все равно будет пустым, потому что операция обновления не должна возвращать результаты из базы данных. Обычно в заявлении вы называете другой метод:

StringBuffer query1 = new StringBuffer("UPDATE table SET col1 = value, WHERE some_col = some_val");
PreparedStatement pstmt1 = con.prepareStatment(query1.toString());
int rowCount = pstmt1.executeUpdate();
0 голосов
/ 27 августа 2010

Существует другой метод для таких утверждений:
s.execute("..");

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...