数据查询后记录集关闭的小问题。

weipj007 2004-09-22 03:45:16
我在一个循环里进行数据库的查询。每次查询之后都把PreparedStatement,ResultSet关闭了。如果循环次数少的话。程序可运行。查出所有的ResultSet都已关闭。但是循环次数多的话。就会报错。可以查出有好多的ResultSet没有关掉。这是怎么回事?
for(int j=0;j<kk;j++){
for(int a=0;a<disbegintime.size();a++){
for(int k=0;k<totalmonth;k++){

if(signtype.equals("0")){
for(int u=0;u<minlist.size();u++){
if(!isexit){

rs5 = dbmanagement.ExecSqlQuery(conn, pstat, selectsql, paratype,paravalue);

if(rs5.next()){
}
rs5.close();
if(pstat!=null)
pstat.close();
}}}}}}
...全文
112 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
drugon 2004-09-23
if(rs5.next())
{
}
rs5.close();
你的这段代码有问题,不管rs5是否有内容,它一定会把rs5做一次close(),如果rs5在查询的时候就没有内容,那么你这个时候来做close()它就会抛出异常的,你在关闭之前应做一个判断,如果rs5不为空的时候就把它关闭,如果为空,可以不管。而且一般我们只要关闭数据库的Connection就可以了,至于PreparedStatement和ResutlSet这些可以不关。
回复
remanwang 2004-09-23
rs5.close();
rs5=null;
if(pstat!=null)
pstat.close();
回复
joincsdn 2004-09-23
不在循环内关闭,在最外层循环结束后关闭ResultSet不行吗!!!
回复
haoshibai 2004-09-23
weipj001 (快乐王子)

怎样可以测出还有好多RS 没有关闭啊!!

我不懂能告诉我吗 》
回复
lydong 2004-09-23
你已经把pstat关闭了,第二次调用的时候自然报错。
回复
liujs1026 2004-09-23
我觉得你应该在所有的循环外面用finally来关闭
回复
CNetol 2004-09-23
TO: weipj001(快乐王子)

可以啊,但是你在多次循环过程中,可能RS资源没有很好的回收!你在循环中把数据库连接关掉试一下!我以前也出现过这种问题!
回复
weipj007 2004-09-23
to haoshibai
我用的是oracle,所以用这条语句可以查到相关的连接。
select user_name, status, osuser, machine, a.sql_text
from v$session b,
v$open_cursor a
where a.sid = b.sid
回复
weipj007 2004-09-22
Connection最后关闭不行吗?
回复
CNetol 2004-09-22
最好不要这么写!

如果要这么写的话,你把数据库连接也关了试试!
也就是说,每次查都要重新连接数据库,虽然这样慢一些,但应该不会出错!
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2004-09-22 03:45
社区公告
暂无公告