getGeneratedKeys()是否应该在所有INSERT操作中返回值1到n?

时间:2014-10-30 16:58:49

标签: mysql jdbc

假设你有一些像这样的代码使用JDBC getGeneratedKeys()方法:

private static void writeToDB(String url[], String project[]){

    try{
        //Update main table
        String sql = "INSERT INTO main (url, project) VALUES(?,?)";
        PreparedStatement mainStmt = dbConn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
        for(int i = 0; i < url.length; i++){
            mainStmt.setString(1, url[i]);
            mainStmt.setString(2, project[i]);
            mainStmt.executeUpdate();
        }

        ResultSet projectId = mainStmt.getGeneratedKeys();
        projectId.next();
        int projectID = projectId.getInt(1);
        System.out.println("AutoGeneratedKey: " + projectID);

        mainStmt.close();
        projectId.close();
    }
    catch(SQLException e){
        e.printStackTrace();
    }

}

现在,在执行上述INSERT命令之前,数据库中有一堆条目。 该表看起来大致如下:

ID |网址|项目

1 | google.com | A
2 | bing.com | B

将ID作为主键并自动增量。

我希望getGeneratedKeys()为上面的INSERT命令返回值3,4,...,n,但我得到1,2,...,n。

由于我想在其他表中使用ID作为外键,因此getGeneratedKeys()不提供正确的值(实际ID),但始终从1开始计数,尽管事先输入数据库。

如何获得实际创建的ID?我没有看到任何与此方法相关的其他线程报告具有相同的问题。

0 个答案:

没有答案