几个建议
 1、插入数据放入另一个表中,不要和查询数据的表放到一块 。这样方便里找错误,等你测试完了,再把它们合到一起。
 
 2、下面这个写法不太好,你还没有调用它们的close方法,其实你这个程序中用一个Statement就可以了。 
   rs_ceshi = null ;
   /**************/
   stat_ceshi = null ;
 
 3、你把数据库连接不要放到Application里面,这是效率最差的一种做法。 4、你程序中的Vector是多于的,可以不要它。 5、你把查询和插入还有删除的SQL都打印出来,这样方便找错。

解决方案 »

  1.   

    就是在同一个表内删除插入,
    先前只有一个Statement,可是出了问题后,我以为一个里面同时执行太多操作有点混乱,所以每个单独用了一个,既然这没问题,我改回好了!
    Vector用过的,在构造插入语句数组,因为插入的记录条数不定,用的Vector一个循环这样执行(如下)有没有什么问题的,我最不明白的是,我输出过插入循环的次数,明明只有2次,为什么有时会插入3条或4条记录????
          for(ii=0 ; ii<=nums - 1; ii++)
          {
            stat_ins.execute( InsertSql[ii] );
          }
      

  2.   

    connection是大家共用的?你同时几个人向服务器发请求?有没有线程安全问题?
      

  3.   

    按照建议小小改动了一点,主要让各位帮忙看看结构,有什么地方可能出现问题的
    ce1 ce2 ce3其实也没什么用,主要是我为了得到删除、检索和插入各执行了多少次而设的记录变量,各位主要看看,删除和插入的就好,谢谢各位~~~
    明天我把删除的语句和插入的都打印出来看看了~
    不过我就是不明白,为什么会出现每次执行结果不同,有时正确,有时又不正确???
    <%   
        //定义要执行SQL操作的字符串
        String DeleteSql = new String("") ;    
        String SelectSql = new String("") ;
        
        //定义和要操作数据库的变量
        Statement stat = null ;//查询    ResultSet rs   = null ;
        /*定义测试变量*/
        ResultSet rs_ceshi = null ;    //定义要执行插入操作写入InsertSql数组
        Vector vec    = new Vector();
        String temp_s = new String("") ;
        String InsertSql[]     ;
     
        //定义变量记录数组个数和循环操作控制量
        int nums = 0 ;
        int ii   = 0 ;
        
        /*测试变量*/
        int ce1 = 0 ;
        int ce2 = 0 ;
        float ce3 = 0 ;
        String cesql = new String("");
        
        //把要执行的删除操作写进DeleteSql字符串中
        DeleteSql = "Delete From table where 条件"  ;  
        
        /*测试删除的记录条数*/
        cesql = "select count(*) as ceshinums From table where 条件(和delete完全一样条件)"  ;
         
         stat =( (Connection)application.getAttribute("Global_con") ).createStatement();
         /*删除执行次数*/
         rs_ceshi   = stat.executeQuery( cesql );
         rs_ceshi.next();
         ce3 = rs_ceshi.getFloat("ceshinums") ;
         rs_ceshi.close() ;
         rs_ceshi = null  ;
         /**************/     ( (Connection)application.getAttribute("Global_con") ).setAutoCommit( false ) ;
          stat.execute( DeleteSql ); 
         ( (Connection)application.getAttribute("Global_con") ).commit() ;
         ( (Connection)application.getAttribute("Global_con") ).setAutoCommit( true ) ;
         
          //删除成功,开始插入调出月份数据
          //定义要执行SQL操作的字符串
           
          SelectSql  = "Select * From table where 条件2" ;     
                
          rs   = stat.executeQuery( SelectSql );
          
          //循环插入符合条件记录
          while( rs.next())
          {
           //把要执行的操作写进InsertSql数组
           nums = nums + 1 ;       temp_s = "Insert Into ..........."   ;
           
           
           /*测试执行的记录条数*/
           ce1++;
           /********************/
           vec.add(temp_s);
         
          }
        /**/ 
        rs.close() ;
        rs = null  ;    //执行数据库的操作,若执行操作时 IsSuccess = 1 , 若不成功时则 IsSuccess = 1
        try
        { 
          ( (Connection)application.getAttribute("Global_con") ).setAutoCommit( false ) ;
          InsertSql = (String[])vec.toArray(new String[nums]);
          //利用循环执行数组中的insert插入语句
          for(ii=0 ; ii<=nums - 1; ii++)
          {
            /*测试执行insert的次数*/
            ce2++;
            /*******************/
            stat.execute( InsertSql[ii] );
          }
          IsSuccess = 1 ;       ( (Connection)application.getAttribute("Global_con") ).commit() ;
          ( (Connection)application.getAttribute("Global_con") ).setAutoCommit( true ) ;
          
        }
        catch( SQLException ex)
        {
          IsSuccess = 0 ;
          ( (Connection)application.getAttribute("Global_con") ).rollback() ;
          System.out.println(ex.getMessage()) ;
        }
       
        
    %>
      

  4.   

    stat_ins.execute( InsertSql[ii] );
    应该在循环里面判断是否插入操作是否成功,如果失败,rollback 。
    成功继续。
      

  5.   

    在执行插入循环体外有一事务整体控制的,如果插入失败直接回回滚!请教PreparedStatement的用法,有谁能给段代码参考一下!
      

  6.   

    我查了查jdk的文档有关prepareStatement的
    不过看资料好象支持update更新和select检索
    好象没有delete和insert的说明,到底支持不?~~
    请高手指点指点
    如果支持给个小例子就好的
    谢谢