2015-05-14 2 views
0

У меня есть запрос, как этотResultSet .next не назывались исключением

String sql_query = select name, display_name from parameter where id = (something); 

После выполнения этого запроса я извлек ResultSet, а затем я пытаюсь обновить значение display_name. Он не работает и бросает исключение

.next не был вызван.

rs = stmt.executeQuery(sql_query); 
String displayName = rs.getString(display_name); 
displayName = displayName.replace("&lt;", "<"); 
rs.updateString(display_name,display name); 
+0

ли вы назвать [ '.next()'] (http://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html#next%28%29) ? –

+0

Я. я назвал Теперь им обращенный вопрос, как ResultSet только для чтения .. даже я пытался добавлением CONCUR_UPDATABLE .. STMT = conn.prepareStatement (SQL, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); Все еще im получение проблемы tat Исключение: Недействительная операция для результатов только для чтения: updateString –

+0

Полезно обрабатывать ResultSet (практически любой ResultSet, фактически) в список объектов Java, как самое первое, что вы делаете с ним. Таким образом, вы можете быстро закрыть ResultSet, позволить ему выйти из сферы действия и освободить свои ресурсы. После этого вы справитесь со списком, размер которого вы можете легко определить. – scottb

ответ

0

Проблема заключается в том, что именно говорится в сообщении об ошибке. ResultSet.next() не был вызван. Так называй это. Не забывайте проверять возвращаемое значение.

+0

Теперь проблема с сталкивающимся лицом, например, с результатами, только для чтения .. даже я попытался добавить CONCUR_UPDATABLE .. stmt = conn.prepareStatement (sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); Все еще im получение проблемы tat Исключение: Неверная операция для результатов только для чтения: updateString –

+0

Вам нужно добавить FOR UPDATE к запросу. – EJP

+0

Запрос на обновление? cn u pls подскажите мне, как добавить tat .. –

0

Если вы хотите получить информацию о одной строке, вам нужно вызвать rs.next(), чтобы переместить курсор в первую строку. Для начала курсор позиционируется перед первой строкой. Если вы хотите иметь дело с несколькими записями, вы можете просмотреть свой набор результатов, как показано ниже. next() возвращает false, поэтому его можно использовать для цикла до конца набора результатов.

while(rs.next()) { 
    String displayName = rs.getString(display_name); 
    displayName = displayName.replace("&lt;", "<"); 
    rs.updateString(display_name,display name); 
} 
+0

Теперь проблема с лицом, похожее на результаты, только для чтения. Даже я попытался добавить CONCUR_UPDATABLE .. stmt = conn.prepareStatement (sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); Все еще im получение проблемы tat Исключение: Недействительная операция только для чтения: updateString –

+0

Возможно, это не проблема с запросом, так как вы не используете никаких соединений или «SELECT *». Возможно, это драйвер, который понижает ваш набор результатов до не обновляемого. Кроме того, добавьте rs.updateRow() после rs.updateString() и зафиксируйте обновление. – rockcode

+0

Я не пробовал rs.updateRow() .. Я возвращаю его для работы и построения его как XML. Если я сделаю <правильно и отправил в XML его высказывание преждевременного окончания файла в журналах .. Я используя tat XML-значения в xsl и использует его во входном текстовом поле. В tat value = {@ display_name} ... Может ли рассказать мне, как решить проблему. В любом случае я мог бы сделать это как <вместо ≪ –