2017-01-14 6 views
1

Я пытаюсь добавить новую запись в таблицу из базы данных Derby. Мне нужно использовать номер записи в одном из полей. Например. Мне нужно сохранить путь к изображению в поле фотографии. И имя изображения должно соответствовать его идентификатору. Например, 1.jpg. Я пытался это заявление (файл не продление используется в данном примере):Как использовать сгенерированный идентификатор в инструкции SQL?

PreparedStatement pstmt = conn.prepareStatement("INSERT INTO Users (name, lastname, email, address, password, photo, lastvisit, status) VALUES ('" + name + "','" + lastname + "','" + email + "','" + address + "','" + DigestUtils.toMd5(password) + "', id, '" + now + "','user')"); 

Но я получаю сообщение об ошибке: java.sql.SQLSyntaxErrorException: Column «ID» либо не в любой таблице в списке FROM. .. Но эта колонка определенно существует. В чем причина ошибки?

+7

Несвязанный, но: пожалуйста, научитесь правильно использовать 'PreparedStatement' ** **. Не объединяйте значения в строку SQL. Вместо этого используйте заполнители ('?'). –

+0

Вы имеете в виду, что если вновь созданная запись 'Users' получает идентификатор пользователя 42, вам нужно, чтобы значение' photo' было ''42 .jpg''? Если это так, то вам либо потребуется инструкция обновления * после * вставка возвращает новый идентификатор вам, либо вам нужно сделать это в триггере. – Andreas

+0

См. Http://stackoverflow.com/questions/1915166/how-to-get-the-insert-id-in-jdbc о том, как получить сгенерированный идентификатор, затем используйте это значение в следующем выражении. –

ответ

1

Ну, короткий ответ imho заключается в том, что вы не можете сделать это в SQL. В вашей таблице «Пользователи», я полагаю, что ваш столбец id является автоматически увеличивающимся первичным ключом. Что вы можете сделать, это вставить свою запись, а затем получить последний идентификатор, сгенерированный для этой инструкции insert. Затем вам нужно выполнить запрос обновления, чтобы установить значение столбца вашей фотографии.

Кстати, безусловно, научиться использовать заполнители в подготовленных заявлений

Я не специалист Дерби, но просматривая документ я нашел, как вы можете получить генерируемые столбцы.

pstmt.execute(sql, Statement.RETURN_GENERATED_KEYS); 
ResultSet keys = pstmt.getGeneratedKeys(); 
keys.next(); 
int id = keys.getInt(); 
Смежные вопросы