我使用Apache DBCP获取连接池,每次使用PoolingDataSource获取连接。当我向数据库中插入对象时,它运行良好,但是当我尝试从数据库中选择一个元素时,就会出现问题:它总是返回DelegatingPreparedStatement和DelegatingResultSet,并且如果执行DelegatingResuletSet的next()方法,则会出现错误“ java.sql” .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
}


谢谢你的帮助,
艾克

最佳答案

在尝试遍历ResultSet之前,您正在关闭PreparedStatement。我认为这是不对的-我认为一旦从ResultSet对象检索了所有结果,就应该同时关闭它们。

编辑:参见the API for close()


  “注意:当一个Statement对象关闭时,它的当前ResultSet对象(如果存在)也被关闭。”

10-07 13:01