Подтвердить что ты не робот

Java PreparedStatement возвращает последний вставленный идентификатор

Этот ответ на этот вопрос, сделанный таким образом, кажется очень трудным найти в Интернете. В основном я вставляю значения в базу данных MySQL, используя PreparedStatement. Я использую PreparedStatement, чтобы избежать данных, чтобы предотвратить атаки SQL Injection. Проблема в том, что теперь есть способ вернуть эти ключи.

String query="Insert INTO Table_A(name, age) (?, ?)";
//String query="Insert INTO Table_A(name, age) ('abc','123' )";//Doesn't escape
PreparedStatement prest;
prest = con.prepareStatement(query);
prest.setString(1,"abc");
prest.setInt(2,123);
prest.executeUpdate();
//prest.executeUpdate(query, PreparedStatement.RETURN_GENERATED_KEYS); Throws an error
//prest.executeQuery(); Throws an error

Итак, как я могу избежать ввода и использовать PreparedStatements в Java?

4b9b3361

Ответ 1

передать Statement.RETURN_GENERATED_KEYS в prepareStatement() вместе с вашим запросом. Затем используйте getGeneratedKeys() из PreparedStatement, чтобы получить ResultSet, содержащий введенный auto_incremented_id.

String query="Insert INTO Table_A(name, age) (?, ?)";
                //String query="Insert INTO Table_A(name, age) ('abc','123' )";//Doesn't escape
                PreparedStatement prest;
                prest = con.prepareStatement(query, Statement.RETURN_GENERATED_KEYS);
                prest.setString(1,"abc");
                prest.setInt(2,123);
                prest.executeUpdate();
                //prest.executeUpdate(query, PreparedStatement.RETURN_GENERATED_KEYS); Throws an error
                //prest.executeQuery(); Throws an error
                ResultSet rs = prest.getGeneratedKeys();
                if(rs.next())
                {
                    int last_inserted_id = rs.getInt(1);
                }

Ответ 3

Если вы не можете использовать RETURN_GENERATED_KEYS, используйте другой оператор (запрос на этот раз) для выполнения

SELECT last_insert_id()

Убедитесь, что у вас определенно есть столбец первичного ключа с автоматическим приращением в этой таблице.