Estou ciente de que você está fazendo algo diferente, mas algumas pequenas dicas para inserções:
Java tem uma forma independente de banco de dados para buscar as chaves geradas de um INSERT. Isso é muito mais seguro do que pegar o MAX depois ou antes, em um ambiente multiusuário.
Cenário para IDs errados:
- primeira INSERÇÃO
- segundo INSERT
- primeiro SELECT
- segundo SELECT
Use também um PreparedStatement, para segurança (injeção de SQL) e escape (se o nome contiver aspas simples ou barra invertida ou algo assim.
E try-withresources sempre fecha as coisas, mesmo no retorno ou exceção.
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);
}