使用jdbcTemplate时,插入数据后获取自增的id(mysql)

两种写法

Connection connection = null;
PreparedStatement ps = null;
ResultSet generatedKeys = null;

connection = dataSource.getConnection();

// 准备插入数据的SQL语句,同时指定返回自动生成的主键
String mSql = "INSERT INTO your_table_name (view_name, view_desc, database_id, version, creator_account, create_time) VALUES (?, ?, ?, ?, ?, ?)";
ps = connection.prepareStatement(mSql, Statement.RETURN_GENERATED_KEYS);
ps.setString(1, viewName);
ps.setString(2, viewDesc);
ps.setString(3, databaseId);
ps.setString(4, version);
ps.setString(5, creatorAccount);
ps.setString(6, createTime);

// 执行插入操作
int affectedRows = ps.executeUpdate();

if (affectedRows == 0) {
throw new SQLException("插入数据失败,没有任何行受影响。");
}

// 获取自动生成的主键
generatedKeys = ps.getGeneratedKeys();
if (generatedKeys.next()) {
long generatedId = generatedKeys.getLong(1);
System.out.println("插入成功,生成的主键值为:" + generatedId);
} else {
throw new SQLException("获取自动生成的主键失败。");
}

另一种

// 假设 jdbcTemplate 已经正确初始化
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

// 创建一个 GeneratedKeyHolder 对象来存储生成的主键值
KeyHolder keyHolder = new GeneratedKeyHolder();

String mSql = "insert into sys_view_m(view_name, view_desc, database_id, last_version, creator_account, create_time, update_time) values(?, ?, ?, ?, ?, ?, ?)";

// 使用 jdbcTemplate.update() 方法执行插入操作,并获取生成的主键值
jdbcTemplate.update(connection1 -> {
PreparedStatement ps = connection1.prepareStatement(mSql, Statement.RETURN_GENERATED_KEYS);
ps.setString(1, viewName);
ps.setString(2, viewDesc);
ps.setString(3, databaseId);
ps.setString(4, version);
ps.setString(5, creatorAccount);
ps.setString(6, createTime);
ps.setString(7, updateTime);

// 返回 PreparedStatement 对象
return ps;
}, keyHolder);

// 从 keyHolder 中获取生成的主键值
Number generatedKey = keyHolder.getKey();
if (generatedKey != null) {
long newViewId = generatedKey.longValue(); // 如果主键是整数类型,可以通过 longValue() 获取其值
System.out.println("Inserted new view with ID: " + newViewId);
} else {
System.out.println("Failed to retrieve generated key");
}