mysql,java - 从一个表中获取最后一个插入的自动增量id并将其再次插入另一个表

时间:2014-03-14 05:32:07

标签: java mysql

Get last inserted auto increment id in mysql

重复的问题

我正在创建一个在M_GROUPS上插入的组。

M_GROUPS表:

GROUP_ID INT AUTO_INCREMENT, 
GROUP_CREATOR_ID INT

来自会话。

我需要GROUP_IDGROUP_CREATOR_ID并将其插入到 M_GROUP_MEMBERS表格为

GROUP_ID INT,
MEMBER_ID INT.

我的问题是我无法从GROUP_ID

获取自动增量值M_GROUPS
public void groupCreation(String groupname, int grouptype, int creator_id) {

    DatabaseService oDatabaseService = new DatabaseService();
    Connection connection = oDatabaseService.connect();
    try {
        Statement stmt = null;
        stmt = connection.createStatement();
        String sql;

        sql = "INSERT INTO M_GROUPS( GROUP_NAME, GROUP_CREATOR_ID,
                                     GROUP_TYPE, CREATION_TIME)"
            + " VALUES ('"
            + groupname
            + "','"
            + creator_id
            + "','"
            + grouptype + "',NOW())";

        //stmt.executeUpdate(sql);
        stmt.executeUpdate(sql);
    } catch (SQLException se) {
        se.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            if (connection != null)
                connection.close();
        } catch (SQLException se) {
            se.printStackTrace();
        }
    }
}

1 个答案:

答案 0 :(得分:2)

使用Statement对象中的getGeneratedKeys()方法来识别新的自动生成值。迭代返回的ResultSet对象,以批处理语句的顺序获取新生成的键值。

更改:

stmt.executeUpdate(sql);

致:

int rowsAffected = 
  stmt.executeUpdate( sql, Statement.RETURN_GENERATED_KEYS );  
ResultSet rs = stmt.getGeneratedKeys();  

//******************************************************  
// in case of batch insert, you can check how many are inserted
rs.last();  
int rows = rs.getRow();  
System.out.println( "Generated keys count: " + rows );  
//******************************************************/  

int currentRow = 1;  
rs.beforeFirst();  
while( rs.next() ) {  
    System.out.println( /**/( currentRow++ ) + " = " + /**/rs.getInt( 1 ) );  
} // while rs  

在变量中拥有此自动生成的键值后,您可以将其与其他SQL语句一起使用,以存储在其他表中。

注意 :如果您使用的JDBC驱动程序不支持此方法,则调用getGeneratedKeys()可能会抛出java.sql.SQLFeatureNotSupportedException