连接数据库的程序:
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance(); 
Connection con=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=yiti", "sa", "123");
Statement stmt=con.createStatement();
stmt.executeUpdate("insert into aa(phonenum,qstime,speed,position)values(?,?,?,?)"); 
如何给这几个?赋值.如果我我要传入的数据很多(有60条),假如用for循环给上面的?赋值,我想知道,我是执行了一次插入数据,还是执行了for循环中的次数次插入数据(如果60条的话,我是一次插入60条,还是插了60次),我是这么理解的,不知道是不是这么个情况?谢谢解答

解决方案 »

  1.   

    executeUpdate是一条一条的执行.用executeBatch是一批一批的执行// turn off autocommit
    con.setAutoCommit(false);PreparedStatement stmt = con.prepareStatement(
    "INSERT INTO employees VALUES (?, ?)");
    for(Item item:dateList){
    stmt.setInt(1, item.getXXX());
    stmt.setString(2, item.getYYY());
    stmt.addBatch();
    }
     
    // submit the batch for execution
    int[] updateCounts = stmt.executeBatch();
      

  2.   

    PreparedStatement void addBatch()
                  throws SQLException将一组参数添加到此 PreparedStatement 对象的批处理命令中。 
    下面是Statement接口中的话
    executeBatch
    int[] executeBatch()
                       throws SQLException将一批命令提交给数据库来执行,如果全部命令执行成功,则返回更新计数组成的数组。返回数组的 int 元素的排序对应于批中的命令,批中的命令根据被添加到批中的顺序排序。方法 executeBatch 返回的数组中的元素可能为以下元素之一: 
    大于等于 0 的数 - 指示成功处理了命令,是给出执行命令所影响数据库中行数的更新计数 
    SUCCESS_NO_INFO 的值 - 指示成功执行了命令,但受影响的行数是未知的 
    如果批量更新中的命令之一无法正确执行,则此方法抛出 BatchUpdateException,并且 JDBC 驱动程序可能继续处理批处理中的剩余命令,也可能不执行。无论如何,驱动程序的行为必须与特定的 DBMS 一致,要么始终继续处理命令,要么永远不继续处理命令。如果驱动程序在某一次失败后继续进行处理,则 BatchUpdateException.getUpdateCounts 方法返回的数组将包含的元素与批中存在的命令一样多,并且其中至少有一个元素将为: 
    EXECUTE_FAILED 的值 - 指示未能成功执行命令,仅当命令失败后驱动程序继续处理命令时出现 
    在 Java 2 SDK, Standard Edition, 1.3 版中已经修改了可能的实现和返回值,以适应抛出 BatchUpdateException 对象后在批量更新中继续处理命令的选项。 
      

  3.   

    如果只是单个的insert是不能用for循环的,不过有一个技巧,先定义定义一个整型变量,初始值为1,在每个set语句中,执行++运算,如下int index=1;
    stmt.setString(index++,obj.getPhonenum());
    stmt.setDate(index++,obj.getQstime());
    stmt.setDouble(index++,obj.getSpeed());
    stmt.setString(index++,obj.getPosition());
      

  4.   

    如果想批量提交的话,就用executeBatch了。
      

  5.   

    我一次提交60条,有必要用批量提交吗?
    insert into aa  
    select c1,c2,c3,c4,c5,c6,c7,c8 union all
    select c1,c2,c3,c4,c5,c6,c7,c8 union all
    select c1,c2,c3,c4,c5,c6,c7,c8 union all
    ......
    select c1,c2,c3,c4,c5,c6,c7,c8  这样一次也可以提交多条数据,就是我感觉写60行。。怕有人看不惯。。
    这样提交和批量处理提交哪个快?(就提交60条数据,数据在数组里面)