java.sql.SQLException:游标状态无效:标识游标未打开标识游标未打开

时间:2011-02-11 09:37:41

标签: java database

我正在使用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
}

感谢您的帮助, 艾克

2 个答案:

答案 0 :(得分:2)

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

修改:请参阅the API for close()

  

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

答案 1 :(得分:0)

关闭Any语句(Statement / PreparedStatement / CallableStatement)通常会关闭关联的ResultSet对象。因此,首先尝试关闭ResultSet,然后关闭PreparedStatement对象。