CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  Web 开发

java数据库问题

楼主wqs0006(顺子)2001-05-26 21:41:00 在 Java / Web 开发 提问

我在jsp文件中用到了ResultSet,但是存在以下问题  
  1。用过rs后,执行rs.close()则出现错误:rs   is   closed  
  2。我不想让rs把完全相同的纪录合并,故在sql语句中加了关键字“all”,单ResultSet好像不支持all,相同纪录还是合并了  
  3。当while(i<=answernum&&rs.next())中,i<=answernum是true,但rs.next())是false时,出现如下错误:rs   is   closed  
   
  源代码如下:  
  <%@page   contentType="text/html;charset=gb2312"   %>  
  <%@page   import="java.io.*,java.sql.*,java.util.*"   %>  
  <jsp:useBean   id="check"   scope="page"   class="bbs.Check"   />  
  <%  
          sql="select   *   from   ever_user   where   UID   in   (select   Author   from   answer   where   QuestionID="+num+")";  
          rs=check.executeQuery(sql);  
          int   tempnum=0;  
          int   i=1;  
          while(i<=answernum&&rs.next())  
          {  
              tempnum=rs.getInt("Num");  
              currentgrace=rs.getInt("ExpertGrace");  
              currentgrace=currentgrace+intgrace[i];  
              sql="update   ever_user   set   ExpertGrace="+currentgrace+"whereNum="+tempnum;  
              check.executeUpdate(sql);  
              i++;  
          }  
          rs.close()//加上此句则出错  
  %>  
   
  本人乃java菜鸟,还望大家多指教!!谢谢!!!!!!!!!! 问题点数:50、回复次数:13Top

1 楼wqs0006(顺子)回复于 2001-05-27 10:03:00 得分 0

怎么没人回答???急!!!!!!!!!!Top

2 楼liulinliu(哦,好累)回复于 2001-05-27 10:35:00 得分 10

sql="update   ever_user   set   ExpertGrace="+currentgrace+"whereNum="+tempnum+"";  
              Top

3 楼sonyStd(三好书生)回复于 2001-05-27 18:35:00 得分 30

bbs.Check里是不是用了相同的Statement?因为当Statement关闭时,相应的ResultSet也将关闭。在while里,你调用了executeUpdate();建议你看看相关的几各类。Top

4 楼wqs0006(顺子)回复于 2001-05-27 22:09:00 得分 0

但我在其它地方也也是这样用的,并没有出此问题,希望大家多多参与,回答一条我也感激不尽!!!Top

5 楼wqs0006(顺子)回复于 2001-05-28 09:26:00 得分 0

谢谢sonyStd(三好书生)  
  我在bbs.Check中的executeQuery和executeUpdate方法中并没使用相同的statement  
  代码如下:  
  public   ResultSet   executeQuery(String   sql)  
      {  
          rs=null;  
          try  
          {  
              if(conn!=null)  
                  conn.close();  
              conn=DriverManager.getConnection(sConnStr);  
              Statement   stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);  
              rs=stmt.executeQuery(sql);  
          }  
          catch(SQLException   ex)  
          {  
              System.err.println("check.executeQuery:"+ex.getMessage()   );  
          }  
          return   rs;  
      }  
   
   
  public   void   executeUpdate(String   sql)  
      {  
          try  
          {  
              if(conn!=null)  
                  conn.close()   ;  
              conn=DriverManager.getConnection(sConnStr);  
              Statement   stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE)   ;  
              stmt.executeUpdate(sql);  
              conn.commit()   ;  
          }  
          catch(SQLException   ex)  
          {  
              System.out.println("check.executeUpdate:"+ex.getMessage());  
          }  
      }Top

6 楼wqs0006(顺子)回复于 2001-05-28 09:30:00 得分 0

经过测试,去掉check.executeUpdate(sql);这句,则程序通过,看来是这句出问题了。  
  Top

7 楼wqs0006(顺子)回复于 2001-05-28 10:29:00 得分 0

我把executeQuery()中的stmt改为stmt1,在把executeUpdate中的stmt改为stmt2,但问题依然存在,我现在用下面的方法把问题解决了,但我还是希望大家能继续讨论此问题!!!!  
   
  while(rs.next()&&i<=answernum)  
          {  
              tempnum[i]=new   Integer(rs.getInt("Num"));  
              currentgrace[i]=new   Integer(rs.getInt("ExpertGrace"));  
              currentgrace[i]=new   Integer(currentgrace[i].intValue()+intgrace[i]);  
              i++;  
          }  
          rs.close();  
          for(i=1;i<=answernum;i++)  
          {  
              sql="update   ever_user   set   ExpertGrace="+currentgrace[i].intValue()+"   where   Num="+tempnum[i].intValue();  
              check.executeUpdate(sql);  
          }Top

8 楼wqs0006(顺子)回复于 2001-05-28 10:33:00 得分 0

另外,第2个问题,即:如果不想把查询结果中列相同的记录合并掉,该怎么办,我试着在sql语句中加关键字“all“,但不行!Top

9 楼skyyoung(路人甲)回复于 2001-05-28 10:59:00 得分 0

在UPDATE  
  不用ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE  
  试试  
   
  public   void   executeUpdate(String   sql)  
      {  
          try  
          {  
              if(conn!=null)  
                  conn.close()   ;  
              conn=DriverManager.getConnection(sConnStr);  
              Statement   stmt=conn.createStatement()   ;  
              stmt.executeUpdate(sql);  
              conn.commit()   ;  
          }  
          catch(SQLException   ex)  
          {  
              System.out.println("check.executeUpdate:"+ex.getMessage());  
          }  
      }   Top

10 楼skyyoung(路人甲)回复于 2001-05-28 11:00:00 得分 10

提示出什么错。Top

11 楼wqs0006(顺子)回复于 2001-05-28 18:34:00 得分 0

出错信息:rs   is   closed  
   
  我想是因为:executeQuery和executeUpdate用的是同一个Connection.当执行check.executeUpdate(sql);后,rs失去了Connection,rs被关掉了,所以当循环到第二次时,产生出错信息。这个问题我已通过下面的代码解决,也就是把executeUpdate从while循环中提出来:  
   
     
          while(rs.next()&&i<=answernum)  
          {  
              tempnum[i]=new   Integer(rs.getInt("Num"));  
              currentgrace[i]=new   Integer(rs.getInt("ExpertGrace"));  
              currentgrace[i]=new   Integer(currentgrace[i].intValue()+intgrace[i]);  
          }  
          for(i=1;i<=answernum;i++)  
          {  
              sql="update   ever_user   set   ExpertGrace="+currentgrace[i].intValue()+"   where   Num="+tempnum[i].intValue();  
              check.executeUpdate(sql);  
          }Top

12 楼wqs0006(顺子)回复于 2001-05-28 18:36:00 得分 0

还有,第二个问题是我自己搞错了,已经解决了,很不好意思!Top

13 楼wqs0006(顺子)回复于 2001-05-28 18:48:00 得分 0

to:skyyoung(路人甲)  
  TYPE_SCROLL_INSENSITIVE的ResultSet,不会显示别人做出的更改(do   not   show   changes   made   by   others),这具体是什么意思呢??  
  我不是计算机系的,基础差了点,呵呵.多指教!!Top

相关问题

  • JAVA数据库问题
  • Java 驱动数据库???
  • java 数据库问题
  • java连SQL Server数据库
  • java数据库连接池?
  • JSP/Java备份数据库
  • java中怎样连接数据库。
  • 用java怎样操作数据库?
  • java如何连接数据库?
  • Java连接Oracle数据库的问题.......

关键词

  • check
  • sql
  • null
  • executeupdate
  • stmt
  • resultset
  • executequery
  • conn
  • 问题
  • rs

得分解答快速导航

  • 帖主:wqs0006
  • liulinliu
  • sonyStd
  • skyyoung

相关链接

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

广告也精彩

反馈

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