2014-08-30 1 views
2

Когда я взываю следующие строки:Почему я вижу NotUpdatable, когда я вызываю ResultSet.refreshRow()?

Statement statement = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY); 
ResultSet resultSet = statement.executeQuery("select * from user"); 
resultSet.next(); 
resultSet.refreshRow();//exception throws here 

Я вижу следующие исключения:

com.mysql.jdbc.NotUpdatable: Результат не указан updatable.This результирующий набор должен исходить из утверждения, что было созданный с типом результата результата ResultSet.CONCUR_UPDATABLE, запрос должен выбрать только одну таблицу, может не использовать функции и должен выбрать все первичные ключи из этой таблицы. Для получения более подробной информации см. Спецификацию API JDBC 2.1, раздел 5.6. Этот набор должен исходить из инструкции, которая была создана с результатом , установить тип ResultSet.CONCUR_UPDATABLE, запрос должен выбрать только одну таблицу , не использовать функции и должен выбрать все первичные ключи от этой таблицы. См. Спецификацию API JDBC 2.1, раздел 5.6 для получения более подробной информации .

Интересно, это исключение, потому что если прочитать refreshRow метод Javadoc можно найти следующее:

Метод refreshRow обеспечивает способ для приложения явно сказать водителю JDBC для refetch строки (s) из базы данных

Таким образом, следующие направления: database --> ResultSet

у меня есть followin г понимание:

обновляемым является возможность использовать следующие направления:

ResultSet --> database 

Таким образом, я не понимаю причину проблемы.

уточните пожалуйста.

+0

В создании вашего заявления, вы не установили его с помощью ResultSet.CONCUR_UPDATABLE? – ControlAltDel

+0

Да. Я хочу только читать из базы данных! – gstackoverflow

+0

Я хочу получить последние изменения с db – gstackoverflow

ответ

0

Когда вы используете, ResultSet.CONCUR_READ_ONLY, вы получаете исключение, что

com.mysql.jdbc.NotUpdatable: Результат не указан updatable.This результат установить должны исходить из заявления, которое было создано с тип результирующего набора ResultSet.CONCUR_UPDATABLE, запрос должен выбрать только одну таблицу, может не использовать функции и должен выбрать все первичные ключи из этой таблицы. См API спецификации JDBC 2.1, раздел 5.6 для более подробной информации. \

Таким образом, изменение ResultSet.CONCUR_READ_ONLY к ResultSet.CONCUR_UPDATABLE, решить вашу проблему. Верный?

Теперь, как я понимаю, вы не хотите этого делать. Я прав? Если да, то я думаю, что вы путаете ResultSet с базой данных,

  • ResultSet.CONCUR_READ_ONLY, значит читать только ResultSet, а не базы данных, аналогично
  • ResultSet.CONCUR_UPDATABLE, означает обновляемый ResultSet, а не базы данных.

Метод, resultSet.refreshRow(), предположим, что для обновления resultSet, следовательно, оно справедливо требует обновляемый ResultSet. Надеюсь, теперь это ясно.

+0

Если я использую ResultSet.CONCUR_UPDATABLE - исключение исчезнет !!! – gstackoverflow