我正在使用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
}
感谢您的帮助, 艾克
答案 0 :(得分:2)
在尝试迭代ResultSet之前,您正在关闭PreparedStatement。我不认为这是对的 - 我认为一旦你从ResultSet对象中检索了所有结果,你应该同时关闭它们。
修改:请参阅the API for close():
“注意:当Statement对象关闭时,它的当前ResultSet对象(如果存在)也会关闭。”
答案 1 :(得分:0)
关闭Any语句(Statement / PreparedStatement / CallableStatement)通常会关闭关联的ResultSet对象。因此,首先尝试关闭ResultSet,然后关闭PreparedStatement对象。