2014-06-09 3 views
0

Мне нужно сохранить некоторые значения в моей таблице с помощью подготовленных операторов.Вставка в базу данных с автоматическим приращением

У меня есть столбец в моей таблице с именем id, и он настроен на автоматическое увеличение. Мне не нужны какие-либо данные от пользователя для этого столбца.

Другие значения получены от пользователя.

Редактировать: Есть 2 ID. Один из пользователей и один, который автоматически создается из базы данных. Первым ключом является автоматически создаваемый базой данных.

Я делаю это правильно?

Спасибо.

Подготовленные Заявление:

DELIMITER $$ 

CREATE DEFINER=`root`@`localhost` PROCEDURE `insert_details`(IN id varchar(45),IN username varchar(45),IN name varchar(45)) 

BEGIN insert into details (id,username,name) values (id ,username,name); 

END 

Код:

PreparedStatement preparedStatement = connect.prepareStatement("CALL INSERT_DETAILS(?,?,?)"); 
preparedStatement.setLong(1, userID); 
preparedStatement.setString(2, username); 
preparedStatement.setString(3, name); 

preparedStatement .executeUpdate(); 
+0

Есть ли причина для использования хранимой процедуры здесь? Не могли бы вы просто сделать connect.prepareStatement («INSERT INTO details (id, username, name) VALUES (?,?,?)»); Вместо этого? –

+0

Да, я могу, но не хранятся процедуры более безопасными? – user3702643

+0

Не совсем. В этом случае безопасность обеспечивается с помощью подготовленных инструкций для дезинфекции входных данных и предотвращения инъекционных атак. Хранимые процедуры обычно зарезервированы для консолидации логики, которую могут использовать несколько клиентов. –

ответ

0

Вы можете просто опустить автоматически сгенерированного поле из подготовленного оператора, как MySQL будет установить это значение для вас. В вашем примере имена ваших параметров сталкиваются с именами атрибутов таблицы. Следующее соглашение состоит в том, чтобы префиксные имена параметров с помощью p_ или схожего имени.

Подготовленное заявление должно выглядеть так:

DELIMITER $$ 
CREATE 
    DEFINER=`root`@`localhost` 
PROCEDURE `insert_details`(
    IN p_user_id VARCHAR(45), 
    IN p_username VARCHAR(45), 
    IN p_name VARCHAR(45)) 
BEGIN 
    INSERT 
    INTO details(id, username, name) 
    VALUES (p_user_id, p_username, p_name); 
END $$ 
+0

Извините, что забыл упомянуть, есть 2 ID. Один из пользователей и один из базы данных. Первым ключом является автоматически создаваемый базой данных. – user3702643

0

Удалите id поле из вашего подготовленного заявления.

Потому что это конфликтует с данными поля, поэтому может возникнуть проблема.

+0

Извините, что забыл упомянуть, есть 2 ID. Один из пользователей и один из базы данных. Первым ключом является автоматически создаваемый базой данных. – user3702643

Смежные вопросы