SQLException: исчерпан Resultset - PullRequest
       0

SQLException: исчерпан Resultset

3 голосов
/ 14 декабря 2011

У меня проблема с моим кодом JDBC. Это соответствующий код:

/** method for checking password into the Oracle database */
public String CheckUserDB(String userToCheck) throws SQLException {
  String storedPassword;
  if (ds == null) throw new SQLException("No data source");      
  Connection conn = ds.getConnection();
  if (conn == null) throw new SQLException("No connection");      

  try {
    conn.setAutoCommit(false);
    boolean committed = false;
    try {
      PreparedStatement passwordQuery = conn.prepareStatement(
        "SELECT passwd from USERS WHERE userz = ?");
      passwordQuery.setString(1, userToCheck);

      ResultSet result = passwordQuery.executeQuery();

      result.next();

      storedPassword = result.getString("passwd");                          

      conn.commit();
      committed = true;
    } finally {
      if (!committed) conn.rollback();
    }
  }
  finally {               
    conn.close();
  }       
  return storedPassword;
}

Это исключение:

java.sql.SQLException: Exhausted Resultset
    oracle.jdbc.driver.OracleResultSetImpl.getString(OracleResultSetImpl.java:1270)
    oracle.jdbc.driver.OracleResultSet.getString(OracleResultSet.java:494)
    org.jboss.jca.adapters.jdbc.WrappedResultSet.getString(WrappedResultSet.java:1359)
    com.dx.sr_57.user_check.CheckUserDB(user_check.java:100)
    com.dx.sr_57.user_check.user_compare(user_check.java:123)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:601)
    org.apache.el.parser.AstValue.invoke(AstValue.java:196)
    org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
    com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
    javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
    com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
    javax.faces.component.UICommand.broadcast(UICommand.java:315)
    javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
    javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
    com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)

Как это вызвано и как я могу это решить?

Ответы [ 3 ]

5 голосов
/ 14 декабря 2011
result.next();

storedPassword = result.getString("passwd"); 

Вы не проверяете возвращаемое значение следующего. Если у вас нет рядов, вы попадаете в беду ...

if(result.next()){
   storedPassword = result.getString("passwd");
}
4 голосов
/ 28 июня 2013

Возможно, проблема не в коде, а в базе данных.Дважды проверьте, что СТОЛ НЕ ПУСТО.Вы получаете эту ошибку, если таблица пуста.Имейте в виду, что базы данных, такие как Oracle, требуют commit после всех ваших insert, update, alter statements. Ваши изменения могут быть не видны за пределами базы данных, пока вы не выполните коммит над вашей базой данных, у меня была эта проблема довольно долгое время.Я продолжал проверять таблицу с помощью оператора select, но проблема с моей базой данных oracle заключалась в том, что я не выдал коммит поверх своей базы данных.

2 голосов
/ 12 марта 2014

используйте тип данных varchar вместо char в базе данных oracle.

если вы используете char, тогда фактический размер с пустым пространством базы данных сравнивается с запросомпараметр

и запрос не выполняется, то есть результат становится ложным.

Поэтому используйте тип данных varchar в базе данных oracle.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...