本帖最后由 limin910 于 2010-10-26 21:44:20 编辑

解决方案 »

  1.   

    写 查询语句吧 然后用list接
      

  2.   

    如果不是那么严谨的话,我会用投机取巧的办法。既然你ID是自增的,那在你插入操作成功后查找最大的主键ID值(就是刚刚插入数据的主键)。应该能明白我的意思吧!
      

  3.   

    不要用批了,用批实现不了,另外,我测试了,不用批性能也不差的。
    下面的代码测试过了,可以跑,
    你看看
    String sql = "set nocount on insert into kehu values(?) SELECT IDENT_CURRENT('kehu') set nocount off";
    long startTime = System.currentTimeMillis();
    PreparedStatement statement = dbconn.prepareStatement(sql);
    ResultSet rs;
    ArrayList ids = new ArrayList();
    for (int i = 100; i < 200; i++) {
    statement.setString(1, "zhangSan");
    rs = statement.executeQuery();
    rs.next();
    ids.add(rs.getInt(1));
    }
    dbconn.commit();
    System.out.println("【数据插入完毕,用时:"
    + (System.currentTimeMillis() - startTime) + "毫秒");
    System.out.println("Id list:" + ids);
      

  4.   

    恩 我也觉得 其实批不批量是一样的
    你insert 表前 先max(id) 看最大的id是多少
    然后insert 后 把大于刚才 的max(id)的 集合查询出来就行了
      

  5.   

    ResultSet rs = statement.getResultSet();

    while (rs.next()) {
    SeqValue = rs.getInt("nextval");
    break;
    }不行吗?
      

  6.   

    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
    connection = DriverManager
    .getConnection(
    "jdbc:microsoft:sqlserver://localhost:1433;databaseName=xols",
    "sa", "sa");
    String sql = "insert into kehu values(?) SELECT IDENT_CURRENT('kehu')";
    long startTime = System.currentTimeMillis();
    statement = connection.prepareStatement(sql);
    for (int i = 100; i < 200; i++) {
    statement.setString(1,"zhangSan");
    statement.addBatch();// 把一个SQL命令加到命令列表}
    ResultSet rs = statement.getGeneratedKeys();
      

  7.   

    谢谢3楼的和2楼的还有大家。
    3楼的方法验证了,插入10000条数据需要8000毫秒左右,不过完全满足我的需求了。
    我综合了2、3楼的方法,也投机取巧了一次。 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
    connection = DriverManager
    .getConnection(
    "jdbc:microsoft:sqlserver://localhost:1433;databaseName=xols",
    "sa", "sa");
    String sql = "insert into kehu values(?) SELECT IDENT_CURRENT('kehu')";
    long startTime = System.currentTimeMillis();
    statement = connection.prepareStatement(sql);
    int khid = 0;
    for (int i = 0; i < 10000; i++) {
    statement.setString(1, "zhangSan");
    statement2 = connection
    .prepareStatement("select max(khid) from kehu");
    resultSet = statement2.executeQuery();
    resultSet.next();
    System.out.println(resultSet.getInt(1) + (i + 1));
    }
    connection.commit();
    System.out.println("【数据插入完毕,用时:"
    + (System.currentTimeMillis() - startTime) + "毫秒");
      

  8.   

    投机方法只有在一种情况下才可以使用,就是该程序的使用者只有一个人,否则当A插入一条数据的时候B紧跟着插入了一条数据,这样A查出来的MAX值就是B插入产生的NO.