CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

JDBC 中ResultSet调用close顺序的问题

楼主kingofvc(提薪像做贼 )2003-11-02 10:32:42 在 Java / J2SE / 基础类 提问

哪位可以帮我讲讲有什么讲究      
  我发现如果顺序不对就会有问题(异常)  
  try  
  {  
  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");    
  }  
  catch(ClassNotFoundException   e)  
  {  
  System.out.println("无sun.jdbc.odbc.JdbcOdbcDriver驱动");  
  System.exit(0);  
  }  
  try  
  {  
  connection   =   DriverManager.getConnection("jdbc:odbc:test","","");  
  statement   =   connection.createStatement();  
  results=statement.executeQuery("select   *   from   test");  
   
  }  
  catch(SQLException   e)  
  {  
  System.out.println("数据库连接异常");  
  }  
  try  
  {  
  int   row=0;  
  while(results.next())  
  {  
  row++;  
  }  
  row++;  
  // results.last();  
                    // row=results.getRow();  
  System.out.println(""+row);  
  results.close();  
  statement.executeUpdate("insert   into   test   values("+row+",'建',55,false);");  
  statement.close();  
  connection.close();  
  }  
  catch(SQLException   e)  
  {  
  System.out.println("还有读取问题");  
  }  
  如果上面的results.close放在statement.executeUpdate("insert   into   test   values("+row+",'建',55,false);");就一定会有异常   为什么?  
  另外我想得到记录数     使用last   以后再用getRow   为什么last会出现异常 问题点数:30、回复次数:8Top

1 楼kingofvc(提薪像做贼 )回复于 2003-11-02 14:23:57 得分 0

有人在吗?Top

2 楼holyelle(炉子)回复于 2003-11-02 16:07:06 得分 0

try  
  {  
  int   row=0;  
  while(results.next())  
  {  
  row++;  
  }  
  row++;  
  // results.last();//result已经定位到最后一个了  
                    // row=results.getRow();  
  将前面的while循环去掉,应该可以通过  
  results.last();  
  row=results.getRow();  
   
  Top

3 楼mortal(马甲)回复于 2003-11-02 16:07:53 得分 10

还没用完,你怎么可以close掉呢,而且,应该只要关一个就够了,你试一下。对于last()方法,并不是所有的都可以用,还要看JDBC驱动,你走的是jdbc-odbc桥,很可能也不支持,我统一是用select   count(*)   from   table,这样就不用定制了。Top

4 楼holyelle(炉子)回复于 2003-11-02 16:10:27 得分 0

你的异常捕捉比较混乱,看看jdbc方面的书吧Top

5 楼kingofvc(提薪像做贼 )回复于 2003-11-03 17:44:22 得分 0

现在都胡涂了    
  发现如果results是statement   进行查询以后的产生的     那么除非在statement进行其他操作前close否则永远都不能close了     一旦进行close就会出错  
  到底是否需要进行close?    
  ResultSet     Statement   还有ConnectionTop

6 楼mortal(马甲)回复于 2003-11-04 09:30:35 得分 10

直接close你的Connection就好了。其它的为什么要关闭呢?Top

7 楼alienbat(亡灵法师)回复于 2003-11-04 10:21:22 得分 10

1。关闭关系:   Connection->Statement->ResultSet。排在前面的被关闭,则后面的自动被关闭。  
  2。last()等方法必须声明Statement对象生成的ResultSet类型为SCROLL才可以使用。  
  (简写->)Statement   st=Connection   con.creatStatement(ResultSet.TYPE_SCROLL_...Top

8 楼jeah(阿杰哥)回复于 2003-11-04 12:03:10 得分 0

关闭的顺序是:先rs.close()再stmt.close()最后conn.close(),如果先close后面的,前面的将会驻留内存里,没法回收,这样是不安全的。Top

相关问题

  • hookproc被调用的顺序问题:后挂的先被调用?
  • 过程的调用顺序和其定义的顺序要一致?
  • 同名dll的调用顺序?mfc42.dll与语言有关吗?
  • f(),g()交换调用次序后,destructor的调用总是一样的顺序,why?
  • 按顺序调用几个存储过程时,数据库时按照顺序来执行的吗?
  • 用户控件和调用该控件的页面的执行顺序问题
  • 求教JSP页面中调用了JavaBean出现了显示顺序问题!
  • 用JDBC-ODBC访问ACCESS,能不能用ResultSet的deleteRow()方法?我怎么用的不行?另外,我在使用CachedRowSet类时,当调用acceptChange()方法时
  • jsp中用jdbc调用oracle数据库
  • 过程可以在JDBC 中调用吗?

关键词

  • jdbc
  • 顺序
  • statement
  • resultset
  • getrow
  • row
  • close
  • 关闭
  • 异常
  • odbc

得分解答快速导航

  • 帖主:kingofvc
  • mortal
  • mortal
  • alienbat

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo