假设你有一些像这样的代码使用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命令之前,数据库中有一堆条目。 该表看起来大致如下:
1 | google.com | A
2 | bing.com | B
将ID作为主键并自动增量。
我希望getGeneratedKeys()为上面的INSERT命令返回值3,4,...,n,但我得到1,2,...,n。
由于我想在其他表中使用ID作为外键,因此getGeneratedKeys()不提供正确的值(实际ID),但始终从1开始计数,尽管事先输入数据库。
如何获得实际创建的ID?我没有看到任何与此方法相关的其他线程报告具有相同的问题。