ResultSet自动关闭问题

 

rs=st.executeQuery("select id from member");
while(rs.next())
            {
    sql="insert into message values('";
                    sql+=rs.getString(1)+"','";
                    sql+=mg.getType()+"','";
                    sql+=mg.getTheme()+"','";
                    sql+=mg.getContent()+"','";
                    sql+=mg.getTime()+"')";
                    st.executeUpdate(sql);
                }

上面代码,rs查询到多条记录,但当rs第二次next()时报错,说rs已关闭,但我并没关闭rs。

自己想想觉得和st有关,是不是生成该rs的st重新执行其他语句时rs就自动关闭了,于是修改程序,先取出rs的所有内容存到List,再用st去调list里面的数据。

 rs=st.executeQuery("select id from member");

ArrayList<String> as=new ArrayList<String>();
    while(rs.next()){
     as.add(rs.getString(1).trim());
    }
    for(int i=0;i<as.size();i++){
     sql="insert into message values('";
     sql+=as.get(i)+"','";
     sql+=mg.getType()+"','";
     sql+=mg.getTheme()+"','";
     sql+=mg.getContent()+"','";
     sql+=mg.getTime()+"')";
     st.executeUpdate(sql);
    }

 

果然运行成功。

上网搜资料发现别人的说法:

其实不必关闭 ResultSet;
因为当产生它的 Statement 关闭、重新执行或用于从多结果序列中获取下一个结果时,该 ResultSet 将被 Statement 自动关闭。 
不过我们在写程序的时候应该做到用完就关闭的习惯。

自己的猜想还是对的。自己基础不深,好多困难自己要多总结,不要一碰问题就去找资料。不好解决的问题,就用自己能想到的最笨的方法先把他弄通了,再去研究简便的方法,理解更深的内容!

转载于:https://www.cnblogs.com/maikuraki/archive/2012/12/01/2797368.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值