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

问大家一个jsp操作数据库的问题

楼主wangminmm(爱因思念)2005-06-01 22:30:36 在 Java / Web 开发 提问

我刚学不久,我想在一个jsp页面里写代码,要从两个表里读数据,然后计算,再写到一个表里。  
  不过我弄好的时候发现出错,提示为object   has   been   closed。大家有什么办法?不想用javabean  
  大家能想想办法帮我吗? 问题点数:60、回复次数:22Top

1 楼panpannana2(潘潘娜娜)回复于 2005-06-01 22:55:20 得分 20

代码有么   贴出来看看  
  lz是不是在两个表里读数据时只用了一个连接?  
  这样是可能造成错误的Top

2 楼sleet96(菜菜)回复于 2005-06-02 10:57:05 得分 0

object   has   been   closed  
  看起来大概是数据库打开方面的问题Top

3 楼wangminmm(爱因思念)回复于 2005-06-02 12:30:33 得分 0

我是建立一个数据库连接,然后用这个连接查询数据库两次,然后写一次,就产生了object   has   been  
  closed.  
  Top

4 楼yxhzj(余华[学习J2EE中])回复于 2005-06-02 12:39:55 得分 0

很明显,某个对象被你关了,没有代码,怎么说Top

5 楼wangminmm(爱因思念)回复于 2005-06-02 12:40:30 得分 0

我分别建立3次连接,用来数据库操作还是不行,提示我object   has   been   closed  
  真晕,不知道该怎么办,我第三次的写操作要用到前面两次读出来的数据  
  请问有解决的办法吗?Top

6 楼wangminmm(爱因思念)回复于 2005-06-02 12:41:39 得分 0

<%            
   
                String[]   dingdan=new   String[4];  
        int   hwnum;  
        int[]   chpinfo   =   new   int[4];  
                int[]   yulinf   =   new   int[4];  
        int[]   mid   =   new   int[4];  
        int   i=0,min=0,temp=0;  
   
        Connection   con;  
        out.clearBuffer();  
                Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();  
                con   =   DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=ERP","sa","7734698");  
                Statement   st   =   con.createStatement();  
        String   dnum   =   request.getParameter("ddnum");  
      //   dnum   =   new   String(dnum.getBytes("ISO-8859-1"),"gb2312");      
        String   pdt   =   request.getParameter("product");  
      //   pdt   =   new   String(pdt.getBytes("ISO-8859-1"),"gb2312");      
        ResultSet   rs   =   st.executeQuery("select   *   from     订单表   where   订单号='2005'");//"+dnum+"  
              //   dingdan   =   new   String[4];  
         
        while(rs.next())  
        {  
          dingdan[0]=rs.getString("订单号");  
  dingdan[1]=rs.getString("货物数量");  
  dingdan[2]=rs.getString("订货单位");  
  dingdan[3]=rs.getString("提货日期");  
        }  
           
          hwnum=Integer.parseInt(dingdan[1]);  
                 
         
         
          ResultSet   rs1   =   st.executeQuery("select   *   from     产品信息   where   产品='电脑桌'");//"+dnum+"  
   
  while(rs1.next())  
  {  
    chpinfo[0]=Integer.parseInt(rs1.getString("玻璃"));  
    chpinfo[1]=Integer.parseInt(rs1.getString("红木"));  
    chpinfo[2]=Integer.parseInt(rs1.getString("油漆"));  
    chpinfo[3]=Integer.parseInt(rs1.getString("钢铁"));  
  }  
   
   
   
          ResultSet   rs2=   st.executeQuery("select   *   from     原料");//"+dnum+"  
                   
  while(rs2.next())  
  {  
    yulinf[0]=Integer.parseInt(rs1.getString("玻璃"));  
    yulinf[1]=Integer.parseInt(rs1.getString("红木"));  
    yulinf[2]=Integer.parseInt(rs1.getString("油漆"));  
    yulinf[3]=Integer.parseInt(rs1.getString("钢铁"));  
  }  
   
   
  for(i=0;i<=3;i++)  
        mid[i]=yulinf[i]/chpinfo[i];    
  for(i=0;i<=3;i++){  
        min=mid[0];  
        if(mid[i]<min)  
            min=mid[i];  
  }  
   
   
  rs.close();        
  rs1.close();  
  rs2.close();  
                  st.close();  
                  con.close();  
  %>Top

7 楼wangminmm(爱因思念)回复于 2005-06-02 12:42:03 得分 0

请大家指点指点小弟Top

8 楼jxdn_yang((我不想做IT了))回复于 2005-06-02 12:47:16 得分 0

把con   =   DriverManager.getConnection再加ResultSet   rs2=   st.executeQuery("select   *   from     原料");//"+dnum+"前看看  
  Top

9 楼wangminmm(爱因思念)回复于 2005-06-02 12:51:09 得分 0

忘记了,我加了,还是一样的  
  <%@   page   contentType="text/html;   charset=gb2312"   language="java"   import="java.sql.*"   errorPage=""   %>  
  <%            
   
                String[]   dingdan=new   String[4];  
        int   hwnum;  
        int[]   chpinfo   =   new   int[4];  
                int[]   yulinf   =   new   int[4];  
        int[]   mid   =   new   int[4];  
        int   i=0,min=0,temp=0;  
   
        Connection   con;  
        out.clearBuffer();  
                Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();  
                con   =   DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=ERP","sa","7734698");  
                Statement   st   =   con.createStatement();  
        String   dnum   =   request.getParameter("ddnum");  
      //   dnum   =   new   String(dnum.getBytes("ISO-8859-1"),"gb2312");      
        String   pdt   =   request.getParameter("product");  
      //   pdt   =   new   String(pdt.getBytes("ISO-8859-1"),"gb2312");      
        ResultSet   rs   =   st.executeQuery("select   *   from     订单表   where   订单号='2005'");//"+dnum+"  
              //   dingdan   =   new   String[4];  
         
        while(rs.next())  
        {  
          dingdan[0]=rs.getString("订单号");  
  dingdan[1]=rs.getString("货物数量");  
  dingdan[2]=rs.getString("订货单位");  
  dingdan[3]=rs.getString("提货日期");  
        }  
           
          hwnum=Integer.parseInt(dingdan[1]);  
                rs.close();  
        st.close();  
                con.close();  
         
         
         
        Connection   con1;  
        out.clearBuffer();  
                Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();  
                con1   =   DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=ERP","sa","7734698");  
                Statement   st1   =   con.createStatement();  
         
         
          ResultSet   rs1   =   st1.executeQuery("select   *   from     产品信息   where   产品='电脑桌'");//"+dnum+"  
   
  while(rs1.next())  
  {  
    chpinfo[0]=Integer.parseInt(rs1.getString("玻璃"));  
    chpinfo[1]=Integer.parseInt(rs1.getString("红木"));  
    chpinfo[2]=Integer.parseInt(rs1.getString("油漆"));  
    chpinfo[3]=Integer.parseInt(rs1.getString("钢铁"));  
  }  
  rs1.close();  
  st1.close();  
                  con1.close();  
   
   
   
        Connection   con2;  
        out.clearBuffer();  
                Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();  
                con2   =   DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=ERP","sa","7734698");  
                Statement   st2   =   con.createStatement();  
   
   
          ResultSet   rs2=   st2.executeQuery("select   *   from     原料");//"+dnum+"  
                   
  while(rs2.next())  
  {  
    yulinf[0]=Integer.parseInt(rs1.getString("玻璃"));  
    yulinf[1]=Integer.parseInt(rs1.getString("红木"));  
    yulinf[2]=Integer.parseInt(rs1.getString("油漆"));  
    yulinf[3]=Integer.parseInt(rs1.getString("钢铁"));  
  }  
  rs2.close();  
  st2.close();  
                  con2.close();  
   
  for(i=0;i<=3;i++)  
        mid[i]=yulinf[i]/chpinfo[i];    
  for(i=0;i<=3;i++){  
        min=mid[0];  
        if(mid[i]<min)  
            min=mid[i];  
  }  
   
   
   
  %>  
   
  这样还是不成Top

10 楼wangminmm(爱因思念)回复于 2005-06-02 12:51:41 得分 0

郁闷死了Top

11 楼jack813()回复于 2005-06-02 12:54:21 得分 0

getConnection后面是不是要加()?  
  如果每次查询后执行  
  st.close();  
  con.close();  
  再次查询时再重新连接呢?Top

12 楼wangminmm(爱因思念)回复于 2005-06-02 12:57:51 得分 0

我加了呀,第二个代码我也是这样做的,建立一次连接再断开,再建立再断开,但是还是不行  
  郁闷啊Top

13 楼jack813()回复于 2005-06-02 13:24:39 得分 0

注释掉后面的两次连接,先进行只连接一次数据库的测试。Top

14 楼yxhzj(余华[学习J2EE中])回复于 2005-06-02 13:30:46 得分 20

呵呵  
  好象有点问题吧  
  第一次:  
    con   =   DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=ERP","sa","7734698");  
  Statement   st   =   con.createStatement();  
    用了  
  就被你close  
   
  第二次:  
    con   =   DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=ERP","sa","7734698");  
   
  Statement   st1   =   con.createStatement();  
  ....这里是不是有点问题  
  conn不是被你关了吗  
   
  第三次:  
  ("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();  
                con2   =   DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=ERP","sa","7734698");  
                Statement   st2   =   con.createStatement();  
  和第二次一样的低级错误  
  Top

15 楼sleet96(菜菜)回复于 2005-06-02 13:52:25 得分 5

根据楼主最后的代码来看:  
  con分明在第一次使用之后已经close,  
  而后面定义了con1,con2,却在使用conTop

16 楼Maple99(Maple)回复于 2005-06-02 13:56:34 得分 5

Statement   st2   =   con.createStatement();  
   
  為     Statement   st2   =   con2.createStatement();  
   
  細節問題Top

17 楼wangminmm(爱因思念)回复于 2005-06-02 14:10:52 得分 0

好的我再试试,这里是我疏忽了Top

18 楼wangminmm(爱因思念)回复于 2005-06-02 14:15:10 得分 0

还是不行啊,我要疯掉了  
   
  <%@   page   contentType="text/html;   charset=gb2312"   language="java"   import="java.sql.*"   errorPage=""   %>  
  <%            
   
                          String[]   dingdan=new   String[4];  
        int   hwnum;  
        int[]   chpinfo   =   new   int[4];  
                          int[]   yulinf   =   new   int[4];  
        int[]   mid   =   new   int[4];  
        int   i=0,min=0,temp=0;  
   
        Connection   con;  
        out.clearBuffer();  
                          Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();  
                          con   =   DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=ERP","sa","7734698");  
                          Statement   st   =   con.createStatement();  
        String   dnum   =   request.getParameter("ddnum");  
      //   dnum   =   new   String(dnum.getBytes("ISO-8859-1"),"gb2312");      
        String   pdt   =   request.getParameter("product");  
      //   pdt   =   new   String(pdt.getBytes("ISO-8859-1"),"gb2312");      
        ResultSet   rs   =   st.executeQuery("select   *   from     订单表   where   订单号='2005'");//"+dnum+"  
              //   dingdan   =   new   String[4];  
         
        while(rs.next())  
        {  
          dingdan[0]=rs.getString("订单号");  
  dingdan[1]=rs.getString("货物数量");  
  dingdan[2]=rs.getString("订货单位");  
  dingdan[3]=rs.getString("提货日期");  
        }  
           
          hwnum=Integer.parseInt(dingdan[1]);  
                          rs.close();  
        st.close();  
                          con.close();  
         
         
         
          Connection   con1;  
        out.clearBuffer();  
                              Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();  
                              con1   =   DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=ERP","sa","7734698");  
                            Statement   st1   =   con1.createStatement();  
         
         
          ResultSet   rs1   =   st1.executeQuery("select   *   from     产品信息   where   产品='电脑桌'");//"+dnum+"  
   
  while(rs1.next())  
  {  
    chpinfo[0]=Integer.parseInt(rs1.getString("玻璃"));  
    chpinfo[1]=Integer.parseInt(rs1.getString("红木"));  
    chpinfo[2]=Integer.parseInt(rs1.getString("油漆"));  
    chpinfo[3]=Integer.parseInt(rs1.getString("钢铁"));  
  }  
  rs1.close();  
  st1.close();  
                                    con1.close();  
   
        Connection   con2;  
        out.clearBuffer();  
                          Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();  
                        con2   =   DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=ERP","sa","7734698");  
                        Statement   st2   =   con2.createStatement();  
     
   
          ResultSet   rs2=   st2.executeQuery("select   *   from     原料");//"+dnum+"  
                   
  while(rs2.next())  
  {  
    yulinf[0]=Integer.parseInt(rs1.getString("玻璃"));  
    yulinf[1]=Integer.parseInt(rs1.getString("红木"));  
    yulinf[2]=Integer.parseInt(rs1.getString("油漆"));  
    yulinf[3]=Integer.parseInt(rs1.getString("钢铁"));  
  }  
  rs2.close();  
  st2.close();  
                                      con2.close();  
   
  for(i=0;i<=3;i++)  
        mid[i]=yulinf[i]/chpinfo[i];    
  for(i=0;i<=3;i++){  
        min=mid[0];  
        if(mid[i]<min)  
            min=mid[i];  
  }  
   
   
   
  %>Top

19 楼wangminmm(爱因思念)回复于 2005-06-02 14:16:56 得分 0

是不是jsp就不支持这样做的呢,大家能给我个别的办法吗?Top

20 楼yxhzj(余华[学习J2EE中])回复于 2005-06-02 14:25:03 得分 0

错误代码呢Top

21 楼wangminmm(爱因思念)回复于 2005-06-02 14:34:00 得分 0

object   has   been   closedTop

22 楼yxhzj(余华[学习J2EE中])回复于 2005-06-02 14:45:20 得分 10

最后面一个连接  
   
  while(rs2.next())  
  {  
    yulinf[0]=Integer.parseInt(rs1.getString("玻璃"));  
    yulinf[1]=Integer.parseInt(rs1.getString("红木"));  
    yulinf[2]=Integer.parseInt(rs1.getString("油漆"));  
    yulinf[3]=Integer.parseInt(rs1.getString("钢铁"));  
  }  
   
   
  好象rs1被你关了呀  
   
  怎么还用  
  改改试试  
   
  还有,先这样测试下  
   
  先不要关  
   
  到最后面再关  
   
  看看行不行Top

相关问题

  • 请问:在2000 下 如何用jsp 操作数据库??
  • 数据库操作及jsp的一点问题
  • jsp 操作数据库的问题,请指教谢谢
  • jsp访问oracle数据库,客户端做什么操作
  • 初学 jsp javabean操作数据库的问题
  • JSP不同数据库 不同操作系统乱码问题
  • 急,求助!!JSP操作数据库的问题。
  • 数据库操作问题
  • 数据库操作问题?
  • 数据库操作问题?

关键词

  • 数据库
  • 连接
  • 代码
  • sqlserver
  • 数据
  • erp
  • sa
  • jdbc
  • jsp
  • microsoft

得分解答快速导航

  • 帖主:wangminmm
  • panpannana2
  • yxhzj
  • sleet96
  • Maple99
  • yxhzj

相关链接

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

广告也精彩

反馈

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