先看看这个例子吧:
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当中就没有内容。欢迎各位来探讨。呵呵
解决方案 »
- 关于HttpUrlconnection类的问题,我不是很了解http请求
- 如何在KeyEvent事件中只对特定字符进行处理?
- 请教一个正则表达式的问题
- swing窗口参数传值,谢谢帮忙
- 帮忙看一下弹出多个JDialog的问题,谢谢了
- Cannot forward after response has been 问题
- 如何實現自動填充web頁面中的文本框
- 请问各位是不是从JApplet继承来的applet,会在浏览器显示上游问题!
- ++++++++++++JDK与JRE有什么区别++++++++++++++++
- 编码问题 急急急急!!!!
- 如何修改JFrame或JInternalFrame的标题栏的背景颜色、前景颜色、背景图象?
- tapestry5在eclipese里面的文件怎么放的 .tml文件放在哪里,class文件放在那里?
语句对象,用于执行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