Saya tahu Anda melakukan sesuatu yang berbeda, tetapi beberapa tips kecil untuk sisipan:
Java memiliki cara independen database untuk mengambil kunci yang dihasilkan dari INSERT. Itu jauh lebih aman daripada mengambil MAX sesudahnya atau sebelumnya, dalam lingkungan multi-pengguna.
Skenario untuk ID yang salah:
- MASUKKAN pertama
- MASUKKAN kedua
- PILIH pertama
- PILIH kedua
Juga gunakan PreparedStatement, untuk keamanan (injeksi SQL) dan meloloskan diri (jika nama berisi tanda kutip tunggal atau garis miring terbalik atau lebih.
Dan try-withresources selalu menutup segala sesuatunya, bahkan saat pengembalian atau pengecualian.
String sql = "INSERT INTO account (name, balance) VALUES (?, 0)";
try (PreparedStatement stmt = conn.prepareStatement(sql,
Statement.RETURN_GENERATED_KEYS)) {
stmt.setString(1, name);
int updateCount = stmt.executeUpdate(); // 1
try (ResultSet id = stmt.getGeneratedKeys()) {
id_user = 0;
if (id.next()) { // 'if' as just 1 row inserted.
id_user = id.getInt(1); // 1 key per row.
}
}
System.out.println(id_user);
}