第一次在java中调用存储过程,代码如下:
CallableStatement proc = dbConn.prepareCall("{ call sp_parameters }"); 
proc.execute();
proc.close();
System.out.println("Loading parameters finished!");存储过程sp_parameters中从一张表格中select出68条数据然后用游标一条一条做一些操作后插入到另外一张表格中。 奇怪的是每次都能选出68条数据,但是只能插入十几条,感觉是存储过程在执行过程中没执行完就被中断了,有什么办法能保证存储过程一定执行完再执行下面的语句吗?

解决方案 »

  1.   

    我调过存储过程了,如果在数据库中手动运行sp的话,68条数据都可以倒入到数据库的。就是在程序里调用的时候只能导入10几条。源代码  public void Load_parameters() throws SQLException
      { 
      int i;
      String sql;
      try
      {
     
          ResultSet results = csvMKTdataStmt.executeQuery("SELECT * FROM parameters");
         
          
          while (results.next())
          {
         //  PreparedStatement pstmt = myConn.prepareStatement(sql);
           sql="insert into raw_parameters  values (";
           for(i=1;i<=8;i++)
           {
         if(i==1)
         {
         sql=sql+"'"+CovnertDealName(((String)results.getObject(i)))+"',";
        
         }
         else
          sql=sql+"'"+results.getObject(i)+"',";
        
         }
           sql=sql+"'"+results.getObject(9)+"')";
           PreparedStatement pstmt = dbConn.prepareStatement(sql);
            pstmt.executeUpdate();
          }
             
          // clean up
          results.close();      CallableStatement proc = dbConn.prepareCall("{ call sp_parameters }"); 
          proc.execute();
      proc.close();
         System.out.println("Loading parameters finished!");
      }
      catch(Exception e)
        {
         System.out.println("Oops-> " + e);
         csvOutputStmt.close();
         dbStmt.close();
         csvConnOutput.close();
            dbConn.close();
            csvConnMKTdata.close();
            csvMKTdataStmt.close();
        }
      }
      

  2.   

    我的存储过程要用到上面那些代码插入的数据的,不过在存储过程调用的时候我插过上面那些代码插入的数据是68条,然后存储过程join了这张有68条数据的表。手动调用存储过程是可以插入68条数据的
      

  3.   

         csvOutputStmt.close();
         dbStmt.close();
         csvConnOutput.close();
            dbConn.close();
            csvConnMKTdata.close();
            csvMKTdataStmt.close();
    这些放到finally里,你看看是否捕获到异常.
      

  4.   

    另外发现 只要在  proc.close();上加一个断点,让它在 proc.excute();后停一会就能把所有数据导进去,所以觉得是存储过程没有执行完就被close了。
      

  5.   

    存储过程的prepared打开了么。