可以使用JDBC API的PreparedStatement对象的getGeneratedKeys()
方法来获取数据库自动生成的ID。具体步骤如下:
在SQL语句中不包含id字段,例如:
INSERT INTO educlass (name, teacher) VALUES (?, ?)
创建一个PreparedStatement对象,并在执行前调用PreparedStatement.getGeneratedKeys()
方法,例如:
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
// 获取数据库连接
conn = DriverManager.getConnection(url, username, password);
// 编写SQL语句并预编译
String sql = "INSERT INTO educlass (name, teacher) VALUES (?, ?)";
pstmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
// 设置参数值
pstmt.setString(1, eduClass.getName());
pstmt.setString(2, eduClass.getTeacher());
// 执行插入操作并获取自动生成的ID
int affectedRows = pstmt.executeUpdate();
if (affectedRows == 0) {
throw new SQLException("Insert failed, no rows affected.");
}
rs = pstmt.getGeneratedKeys();
if (rs.next()) {
int id = rs.getInt(1);
// 将生成的ID设置回eduClass对象
eduClass.setId(id);
} else {
throw new SQLException("Insert failed, no ID obtained.");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 关闭所有资源
try { if (rs != null) rs.close(); } catch (SQLException e) {}
try { if (pstmt != null) pstmt.close(); } catch (SQLException e) {}
try { if (conn != null) conn.close(); } catch (SQLException e) {}
}
在上述代码中,使用Statement.RETURN_GENERATED_KEYS
参数来告诉PreparedStatement对象,在执行插入操作后要返回自动生成的ID。然后在执行完插入操作后,通过调用PreparedStatement.getGeneratedKeys()
方法获取自动生成的ID所对应的ResultSet对象,并通过调用ResultSet.getInt()
等方法来获取生成的ID值。最后将生成的ID设置回eduClass对象中即可。
需要注意的是,使用该方法获取自动生成的ID前提是数据库表中必须有自增