Tôi biết rằng bạn đang làm điều gì đó khác biệt, nhưng một số mẹo nhỏ để chèn:
Java có một cách độc lập với cơ sở dữ liệu để tìm nạp các khóa đã tạo của một INSERT. Điều đó an toàn hơn rất nhiều so với việc lấy MAX sau đó hoặc trước đó, trong môi trường nhiều người dùng.
Tình huống cho ID sai:
- CHÈN đầu tiên
- CHÈN thứ hai
- CHỌN đầu tiên
- CHỌN thứ hai
Cũng sử dụng một PreparedStatement, để bảo mật (SQL injection) và thoát (nếu tên chứa một dấu ngoặc kép hoặc dấu gạch chéo ngược hoặc tương tự.
Và try-withresources luôn đóng mọi thứ, ngay cả khi trả lại hoặc ngoại lệ.
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);
}