与Get last inserted auto increment id in mysql
重复的问题我正在创建一个在M_GROUPS
上插入的组。
M_GROUPS
表:
GROUP_ID INT AUTO_INCREMENT,
GROUP_CREATOR_ID INT
来自会话。
我需要GROUP_ID
和GROUP_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();
}
}
}
答案 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
。