先看看这个例子吧:
Statement stmt = conn.createStatement();
ResultSet res = stmt.executeQuery(sql);
如果要是在使用res之前关掉stmt,这时候res肯定没有内容。我的疑问就是既然已经从数据库中
拿到了查询结果,而且是存放在内存中,那为什么还要仍旧将res和stmt关联在一块,不觉得这是
设计的问题吗。还有我自己时间比较紧张,我向从源码角度得到答案,那就是为什么如果stmt关闭
以后res当中就没有内容。欢迎各位来探讨。呵呵
Statement stmt = conn.createStatement();
ResultSet res = stmt.executeQuery(sql);
如果要是在使用res之前关掉stmt,这时候res肯定没有内容。我的疑问就是既然已经从数据库中
拿到了查询结果,而且是存放在内存中,那为什么还要仍旧将res和stmt关联在一块,不觉得这是
设计的问题吗。还有我自己时间比较紧张,我向从源码角度得到答案,那就是为什么如果stmt关闭
以后res当中就没有内容。欢迎各位来探讨。呵呵
语句对象,用于执行SQL语句,并将数据检索到结果集(ResultSet)对象中
ResultSet
结果集对象,包含执行SQL语句后返回的数据的集合
使用语句对象来执行SQL语句,有两种情况:
一种是执行SELECT、DELETE、UPDATE和INSERT之类的数据库操作语句(DML),使用Statement对象的executeQuery和executeUpdate方法执行;
如:
sta.executeUpdate("INSERT INTO Friends VALUES('田七', '重庆', 456712, '2003-2-25', 7500)");
另一种是DDL 命令包括create、alter 和 drop,用于创建、删除、修改数据库对象
如:
sta.execute("create table Customer (CustIdnumber(3),CustNamevarchar2(15),Address varchar2(30))");
不过你说的那些我都知道,我的问题是,在我执行查询取得resultset以后,为什么它的结果还要和statement联系在一块,如果我要是把statement关闭的话,这样我再去用resultset取得里面的记录,这时,它里面就一定没有一条记录,但实际上如果我要不是不关闭statement的话,它里面会有查询到的结果。
我有两个疑惑:第一,我认为设计上不好,既然已经拿到了查询结果到内存中,那干嘛还要和statment关联在一块了;第二个问题是,我想从源码角度找到原因。呵呵,不过我还是要谢谢你的回答。
如果你不关注结果,如,只进行数据插入,当然可以不要ResultSet
stmt.executeUpdate(sql); 此句单独成行,不必传给rs