Zdaję sobie sprawę, że robisz coś innego, ale kilka małych wskazówek dotyczących wstawek:
Java ma niezależny od bazy danych sposób pobierania wygenerowanych kluczy INSERT. Jest to o wiele bezpieczniejsze niż przyjmowanie MAX później lub wcześniej, w środowisku wielu użytkowników.
Scenariusz dla błędnych identyfikatorów:
- pierwsza WSTAWKA
- druga WSTAWKA
- pierwszy WYBÓR
- drugi WYBÓR
Użyj także PreparedStatement, dla bezpieczeństwa (wstrzyknięcie SQL) i ucieczki (jeśli nazwa zawiera pojedynczy cudzysłów lub ukośnik odwrotny).
A try-withresources zawsze zamyka rzeczy, nawet w przypadku zwrotu lub wyjątku.
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);
}