敬请指教,急! 环境: JDK1.5 + Tomcat5.5 + Eclipse + 数据访问连接池
代码中频繁调用(差不多调用40次左右)oracle存储过程返回游标(记录集),会出现错误"超出游标最大数量"的提示,之后通过tomcat连接的所有数据库连接返回游标的都不行,但是直接在oracle里调试存储过程都没问题;重启Tomcat也能解决问题.
附调用存储过程的源代码:
/**
 * 返回当前分页的数据集
 * @param String sql 传入的sql语句
 * @param int limit 每页显示最大记录数 
 * @param int pageNum 要显示的页码
 * @param Map fieldMap 要显示的字段名(列头)
 * @return List 显示的所有数据集
 */
public List getShowDatas(String sql,int limit,int pageNum,Map fieldMap){
CallableStatement callStam = null;
ResultSet rs = null;
Connection con = null;
ArrayList dataList = new ArrayList();
HashMap hashMap = null;
String fielden = null;
try {
con = PoolFactory.getPool().getConnection();
callStam = con.prepareCall("{call pkg_nop3.pro_getShowDatas(?,?,?,?)}");
callStam.registerOutParameter(4, OracleTypes.CURSOR);
callStam.setString(1, sql);
callStam.setInt(2, limit);
callStam.setInt(3, pageNum);
callStam.execute();
rs = (ResultSet)callStam.getObject(4);
while (rs.next()) {
hashMap = new HashMap();
Set keys = fieldMap.keySet();
Iterator it = keys.iterator();
while (it.hasNext()) {
fielden = (String) it.next();
hashMap.put(fielden, rs.getString(fielden));
}
dataList.add(hashMap);
}
return dataList;
} catch (Exception e) {
e.printStackTrace();
this.errorMessage = e.getMessage();
return null;
} finally {
PoolManager.close(rs);
if (callStam != null)
try {
callStam.close();
} catch (SQLException e) {
e.printStackTrace();
}
PoolManager.close(con);
}
}