我使用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对象(如果存在)也被关闭。”