Получение ошибки в команде удаления MySQL через код Java

#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 не GETINT

4. @Johan Я никогда этого не говорил — трассировка стека, очевидно, показывает ResultSet , что где-то в коде OP задействовано, хотя это тоже getInt() происходит.

5. UpdateLookupTable.java: 118 — что там

Ответ №1:

Ваша проблема не в коде, который вы показали. У вас есть resultSet.getInt(..) где-то перед вызовом resultSet.first() или .next()