java.sql.SQLException :invalid cursor state: identified cursor is not open identified cursor is not open

标签 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
}

感谢您的帮助, 艾克

最佳答案

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

编辑:参见the API for close() :

"Note:When a Statement object is closed, its current ResultSet object, if one exists, is also closed."

关于java.sql.SQLException :invalid cursor state: identified cursor is not open identified cursor is not open,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4967483/

相关文章:

mysql - 表不存在,但确实存在

mongodb - MongoDB 可以为单个服务器生成多少个唯一 ID?

java - Spring 启动: JPA incorrectly adds where clause

java - 找不到引用的方法 'com.google.firebase.tasks.Task setValue(java.lang.Object,java.lang.Object)'

Java:将代码移动到另一个类后调用 super

java - 恢复崩溃的输入流

sql - Oracle 更新中神秘的笛卡尔积

php - 我如何将目录变成可以轻松更新的数据库?

database - Azure 表存储 (NoSQL) 中的单独表与一张大表

java - 使用 JCE 的 3DES/DES 加密 - 生成可接受的 key