【Java】MySQL8 JDBC executeUpdate后取主键经验之谈
版本说明:
MySQL: 8.0.15
Java JDK: 11
mysql-connector-java: 8.0.15
# 需求
插入数据库后返回主键 ID
# 网上教程代码
//(代码经过敏感处理)
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection(
"jdbc:mysql://127.0.0.1:3306/xxxxxx?useSSL=false&serverTimezone=UTC", "****", "***");
String sql = "INSERT INTO openorders (a,b,c,d) VALUES (?, ?, ?, ?)";
PreparedStatement preparedStatement = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
preparedStatement.setString(1, a);
preparedStatement.setDouble(2, b);
preparedStatement.setDouble(3, c);
preparedStatement.setDouble(4, d);
//返回生成的id
preparedStatement.executeUpdate();
ResultSet generatedKeys = preparedStatement.getGeneratedKeys();
if (generatedKeys.next()) {
System.out.println(generatedKeys.getInt("id"));//关键
}
generatedKeys.close();
preparedStatement.close();
conn.close();
# 输出结果
然而,在我的运行环境下,会报错提示 Column 'id' not found.
在一顿摸索后,发现 generatedKeys
返回的字段名为 GENERATED_KEY
,而不是 id
,因此使用
generatedKeys.getInt("GENERATED_KEY");
generatedKeys.getInt(1);
是可以返回主键的,具体原因暂时未知,未知是否与高版本的 MySQL、JDK 有关,但有多年前的文章也提到这个问题。
上次更新: 2022/01/05, 22:36:44