JDBC中Statement和ResultSet的关联关系

在默认情况下,同一时间每个 Statement 对象在只能打开一个 ResultSet 对象。
因此,如果读取一个 ResultSet 对象与读取另一个交叉,则这两个对象必须是由不同的 Statement 对象生成的。
如果某个Statement打开了当前的一个 ResultSet 对象,则 Statement 接口中的所有执行方法都会隐式关闭这个ResultSet对象(即这个Statement对象再次执行某个执行方法时就会隐式关闭前一次打开的那个ResultSet对象!!!)。

public void initTransplantStatus () throws Exception
{
Connection conn=null;
Statement st=null;
Statement st2=null;
ResultSet rs=null;
String sql="";
int id=20;
System.out.println(st.KEEP_CURRENT_RESULT);
int i=1;
try{
conn=DBUtil.getConnection();
conn.setAutoCommit(true);
st=conn.createStatement();
st2=conn.createStatement(); //第二个Statement对象
st.execute("delete from transplant_status");
rs=st.executeQuery("select t.id,cl.id from school t join classes cl on t.id=cl.school_id order by t.id");
while(rs.next())
{
id=id+10;
sql="insert into transplant_status values('"+id+"','"+rs.getString(1)+"','"+rs.getString(2)+"','0',sysdate)";

/**
* 不能再用第一个Statement对象来执行这个执行方法,
* 否则之前的那个ResultSet对象会被隐式关闭,导致while循环只能执行一次!!
*/
st2.execute(sql);
}
conn.commit();
rs.close();
st.close();
st2.close();
conn.close();
}catch(Exception e)
{
System.out.println(e.getMessage());
err="初始化迁移状态表时出错!";
throw new Exception(e.getMessage());
}

}


默认的情况下是一个ResulSet对应一个Statement 的,当用一个Satement 获取2个ResultSet 时,其实 第一个Result 已经关闭了,因为产生第2个ResultSet产生时势必是去调用 Statement的执行方法 产生,此时它会隐式关闭第一个ResultSet。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值