java.sql.SQLException: недопустимое состояние курсора: идентифицированный курсор не открыт идентифицированный курсор не открыт - PullRequest
0 голосов
/ 11 февраля 2011

Я использую Apache DBCP для получения пула соединений, я использую PoolingDataSource для получения соединения каждый раз.Это работает хорошо, когда я вставляю объект в базу данных, но проблема возникает, когда я пытаюсь выбрать элемент из базы данных: он всегда возвращает DelegatingPreparedStatement и DelegatingResultSet, и если выполняется метод next () DelegatingResuletSet, выдается ошибка.SQLException: недопустимое состояние курсора: идентифицированный курсор не открыт, идентифицированный курсор не открыт ».Я не знаю почему, кто-нибудь знает, в чем проблема?Я использую HSQLDB.Коды:

String strSql = "select * from " + strTableName + " where " + strColumnName
    + " = ? ";

PreparedStatement aPreparedStatement = con.prepareStatement(strSql);

ResultSet aResultSet = null;

/*
 *  Execute the query
 */
try 
{
  aPreparedStatement.setString(1, strValue);

  aResultSet = aPreparedStatement.executeQuery();
}
catch (SQLException theException) 
{
  aPreparedStatement.close();

  throw theException;
}
aPreparedStatement.close();

while (theResultSet.next())
{
   // do something else
}

Спасибо за помощь, Айк

Ответы [ 2 ]

2 голосов
/ 11 февраля 2011

Вы закрываете PreparedStatement, прежде чем пытаетесь выполнить итерацию по ResultSet.Я не думаю, что это правильно - я думаю, что вы должны закрыть их оба одновременно, как только вы получите все свои результаты из объекта ResultSet.

Редактировать: см. API для закрытия() :

"Примечание. Когда объект Statement закрывается, его текущий объект ResultSet, если таковой существует, также закрывается."

0 голосов
/ 16 июля 2011

Закрытие любого оператора (Statement / PreparedStatement / CallableStatement) обычно закрывает связанный объект ResultSet. Поэтому сначала попытайтесь закрыть ResultSet, а затем объект PreparedStatement.

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