代码如下:
int num=0;
while(当某条件满足时){
  try{
  num++;
   
  String sql="insert into QC.FTP (key,pass,stime,ip,stan) values('q','q','q','q',"+new Integer(num).toString()+")";  stmt.executeUpdate(sql);
  }catch(Exception e){
  continue;
  }}上述循环执行第一次时能够成功执行insert语句,但是执行第二次循环时报错:SQL命令未正确结束。但是把上述sql语句放到SQL plus里面依次执行则没有问题,请问是哪里出了问题啊?

解决方案 »

  1.   

    循环里的stmt要重新new一个,不能使用同一个stmt
      

  2.   

    改成String sql="insert into QC.FTP (key,pass,stime,ip,stan) values('q','q','q','q','"+new Integer(num).toString()+"')";试试
      

  3.   

    而且在循环中最好使用PreparedStatement代替Statement,PreparedStatement是对sql进行预编译的,效率比Statement高
      

  4.   

    楼上的 wutian4567268 说的应该是正解。楼主在java里面可以使用batch方式,batch是支持一次执行多条sql语句的。
      

  5.   

    但是我使用Access数据库执行上述操作时,在while循环中不用生成新的statement就没有问题,难道Oracle数据库不支持这样的操作吗
      

  6.   

    什么时候提交的 commit了吗 这好像不是问题的所在
      

  7.   

    批量提交吧,效率好。try {
    conn.setAutoCommit(false);
    pstmt = conn.prepareStatement(sqlText);
    for (int i = 0; i < xxx.size(); i++) {
    pstmt.setLong(...);
    pstmt.addBatch();

    if (i % 500 == 0) {
    pstmt.executeBatch();
    conn.commit();
    pstmt.clearBatch();
    }
    }

    pstmt.executeBatch();
    conn.commit();
    } catch (SQLException e1) {
    try {
    conn.rollback();
    } catch (SQLException e) {
    logWriter.error(e);
    }
    logWriter.error(e1);
    } finally {
    DBConnection.closeResource(conn, null, pstmt);
    }
      

  8.   

    说明你第一次执行sql就有问题,所以未结束,把所以代码都贴出来吧
      

  9.   

    问题已解决,不是循环中不能使用同一个stmt的问题,实际上是可以用同一个stmt的,谢谢各位