2016-07-26 3 views
1

Я вставлял несколько строк в ResultSet, как показано ниже, мне нужно распечатать ResultSet после вставки всех строк, поэтому попробуйте переместить курсор назад до первой строки, и он не работает там с ошибка - «ошибка при этой линии: java.lang.IllegalStateException: Этот метод не может быть вызван, когда курсор находится на вставленную строку»JDBC - Переместить курсор из вставкиRow

ResultSet rs = ...; 
for(int i=0; i<5; i++){ 
rs.moveToInsertRow(); 
    rs.updateString("NAME", "Jon"); 
    rs.updateString("ADDRESS", "111 New York"); 
    rs.updateString("EMAIL", "[email protected]"); 
} 

rs.beforeFirst(); // Error at this line: Java.lang.IllegalStateException: This method cannot be called when the cursor is on the insert row 

//ResultSet print logic goes here 
if(rs.getType() == ResultSet.TYPE_FORWARD_ONLY){ 
    ResultSetMetaData rsmd = rs.getMetaData(); 
    int columnsNumber = rsmd.getColumnCount(); 
    while (rs.next()) { 
     for (int i = 1; i <= columnsNumber; i++) { 
     String columnValue = rs.getString(i); 
     sb.append(rsmd.getColumnName(i)).append(" : ").append(columnValue).append("  "); 
     } 
    } 
} 

Любая идея, как переместить курсор назад в исходное положение, когда moveToInsertRow() был вызван?

ответ

0

Вы должны сделать ваше заявление прокручивать, чтобы сделать это, что-то вроде ниже

Statement statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); 
0

После проделав вставки, необходимо оставить вставки строки с помощью moveToCurrentRow(), чтобы вернуться к строке вы где, после того сделав это (и предположим, что на самом деле есть прокручиваемый курсор), вы можете позвонить beforeFirst().

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

Смежные вопросы