Нужна помощь для ResultSet в Java - PullRequest
1 голос
/ 29 июля 2011

Я использую ResultSet для извлечения данных с моего сервера SQL. Код выглядит следующим образом:

ResultSet rs = getValueFormTable();

Я зацикливаюсь на ResultSet вот так:

do{
   // process data
} while(rs.next());

Предположим, есть 10 записей, и я на четвертом значении ResultSet. Возникает ситуация, когда мне нужно взять одно значение пятой записи ResultSet и снова вернуться к четвертой записи Resultset.

Это возможно?

Ответы [ 3 ]

7 голосов
/ 29 июля 2011

Предположим, есть 10 записей, и я в четвертом значении ResultSet. Возникает ситуация, когда мне нужно принять одно значение пятого ResultSet, снова вернуться к четвертому Resultset. Это возможно в Java?

Вам нужно «прокручивать» ResulSet экземпляров, чтобы достичь, чтобы прокрутить набор результатов; если вам нужно обновить предыдущие наборы результатов, вам нужны прокручиваемые и обновляемые наборы результатов (в последнем параграфе обсуждаются обновляемые наборы результатов). Обычно ResultSet s имеют значение TYPE_FORWARD_ONLY и могут прокручиваться только в прямом направлении с использованием метода next().

Вам потребуется создать экземпляр ResultSet типа TYPE_SCROLL_INSENSITIVE или TYPE_SCROLL_SENSITIVE, чтобы вызывать другие методы, такие как absolute() и previous() для перемещения назад и вперед ResultSet.

Для создания прокручиваемого ResultSet требуется указать тип ResultSet, возвращаемый объектом Statement или PreparedStatement, так как тип по умолчанию - TYPE_FORWARD_ONLY, как указано ранее. Фрагмент, демонстрирующий, как это сделать, показан ниже:

PreparedStatement pStmt = Connection.prepareStatement(query, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
ResultSet rs = pStmt.executeQuery();
...
// You can now invoke rs.previous(), rs.absolute(n) etc. to move back and forth.

Вы хотели бы прочитать о том, как указать тип ResultSet в методах Connection.createStatement, Connection.prepareStatement и Connection.prepareCall .

Если вы хотите изменить содержимое ResultSet, а не просто прочитать его, вам нужно будет создать «обновляемые» ResultSets. Это легко сделать, указав тип параллелизма ResultSet как CONCUR_UPDATABLE. Затем вы можете вызвать любой из методов updateXXX и следовать за ним методом updateRow для обновления основного источника данных.

1 голос
/ 29 июля 2011

Первый do-while не очень хороший способ получить результат из ResultSet.Я бы рекомендовал вам использовать while Loop.

while( rs.next() ){
    ...
}

Second.да, есть способ вернуться к предыдущему ряду, если он доступен.

if( rs.previous() ){
    //Do what value you want from previous record and jump to next record.
}
1 голос
/ 29 июля 2011

Да, вы можете, если у вас есть TYPE_SCROLL_INSENSITIVE или TYPE_SCROLL_SENSITIVE ResultSet

Использовать ResultSet.previous

(Когда вы находитесь в первой строке, вызов ResultSet.previous вернет false (но не вызовет никаких исключений), но любой последующий вызов любых методов, которым нужна текущая строка, например resultSet.getString, сгенерируетSQLException. Вы можете справиться с этим, проверив ResultSet.isFirst

В ResultSet имеется множество таких методов, посмотрите на документы один раз.

...