#java #mysql #sql #jakarta-ee #jdbc
#java #mysql #sql #джакарта-ee #jdbc
Вопрос:
Я использовал jdbc для удаления записей из таблицы, при выполнении того же самого я получил ошибку, как показано ниже :
java.sql.SQLException: Before start of result set
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:841)
at com.mysql.jdbc.ResultSetImpl.getInt(ResultSetImpl.java:2674)
at com.mysql.jdbc.ResultSetImpl.getInt(ResultSetImpl.java:2815)
at org.apache.commons.dbcp.DelegatingResultSet.getInt(DelegatingResultSet.java:236)
at net.ordernet.vd.lookupTable.UpdateLookupTable.deleteLookupTableRecords(UpdateLookupTable.java:118)
at net.ordernet.vd.soap.UpdateLookupTableTool.deleteLookupTableRecords(UpdateLookupTableTool.java:50)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
Мой код выглядит следующим образом :
1) для определения запроса берутся две строки
2) объект connection используется для подготовки инструкции
3) проверил результат запроса на обновление в переменной ‘int’
4) Я не использовал результирующий набор, получая исключение результирующего набора, хотя …!
try
{
String queryDeleteLookupTableRecords = "delete from LookupTableRecords where tableId = ?";
String queryDeleteLookupTableRows = "delete from LookupTableRows where tableId = ?";
PreparedStatement psDeleteLookupTableRecords = oConnection.prepareStatement(queryDeleteLookupTableRecords);
PreparedStatement psDeleteLookupTableRows = oConnection.prepareStatement(queryDeleteLookupTableRows);
psDeleteLookupTableRecords.setInt(1, oLookupTable.getID());
psDeleteLookupTableRows.setInt(1, oLookupTable.getID());
int result = psDeleteLookupTableRecords.executeUpdate();
int result2 = psDeleteLookupTableRows.executeUpdate();
if(result > 0 amp;amp; result2 > 0)
{
iReturnValue = 1;
}
psDeleteLookupTableRecords.close();
psDeleteLookupTableRows.close();
}
catch (SQLException oSqlException)
{
Log.print(oSqlException);
}
Комментарии:
1. Похоже, что трассировка стека и фрагмент кода не имеют никакой корреляции. Не могли бы вы опубликовать код метода
UpdateLookupTable.deleteLookupTableRecords()
? Вы вызываетеgetInt()
ResultSet
там, и похоже, что вы не звонилиrs.next()
до этого.2. Было бы полезно, если бы вы могли точно определить, где именно возникает исключение. И аннотируйте код в вопросе, чтобы показать нам.
3. @PhilippReichart,
delete
оператор не возвращает результирующий набор. И кодsetint
не GETINT4. @Johan Я никогда этого не говорил — трассировка стека, очевидно, показывает
ResultSet
, что где-то в коде OP задействовано, хотя это тожеgetInt()
происходит.5. UpdateLookupTable.java: 118 — что там
Ответ №1:
Ваша проблема не в коде, который вы показали. У вас есть resultSet.getInt(..)
где-то перед вызовом resultSet.first()
или .next()