![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Гость_konstantin |
|
|||
|
Unregistered |
Добрый день!
Есть таблица (использую MYSQL), в которой имеется поле ID, которое имеет свойство auto-increment. Оно так же является primary key. Затем в программе делаю insert, где задаю остальные поля, кроме ID. Суть в том, чтобы это ID генерировалось базой по правилу инкремента, а затем мне надо получить это сгенерированное значение. Не могу понять, как такое сделать. Я использую prepared statement. В документации есть метод Connection.prepareStatement(String sql, int autogeneratedKeys) (Не помню точного имени второго параметра). Написано, что помощи этого параметра можно задать, что из Statement'a можно будет получить автогенерированные ключи при помощи ResultSet Statement.getGeneratedKeys() Но, в возвращенном ResultSet нет поля ID, а если точнее, он вообще пустой. |
|||
|
||||
| batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
Я не уверен, что операция INSERT вообще возвращает ResultSet...
Приведи код, тогда проблема станет яснее. Как именно ты выполняешь INSERT? Через executeUpdate? Это сообщение отредактировал(а) Lamer George - 2.12.2005, 22:59 -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
| Guest |
|
|||
|
Unregistered |
insert возвращает boolean-результат операции
код завтра, хрошо? |
|||
|
||||
| Гость_konstantin |
|
|||
|
Unregistered |
||||
|
||||
| batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
Да не вопрос -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
| Гость_konstantin |
|
|||
|
Unregistered |
Вру, не boolean, это я говорил про просто execute()
executeUpdate() возвращает кол-во строк...но в любом случае не ResultSet:) |
|||
|
||||
| batigoal |
|
||||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
Судя по доке, стейтмент надо делать так:
, а получать
У тебя так? -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
||||
|
|||||
| Guest |
|
|||
|
Unregistered |
Именно так и делал.
Возвращает ResultSet, но в нем нет моего поля ID |
|||
|
||||
| kkorsakoff |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 378 Регистрация: 18.10.2005 Где: Санкт-Петербург Репутация: 3 Всего: 14 |
Нашел интересную статейку. Завтра буду пробовать
http://en.mysql.ru/doc/refman/4.1/en/cj-re...ve-autoinc.html |
|||
|
||||
| batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
Насколько я вижу, здесь разница в том, что используется не PreparedStatement, а просто Statement, на котором выполняется
Напиши потом, что получится. -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
| kkorsakoff |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 378 Регистрация: 18.10.2005 Где: Санкт-Петербург Репутация: 3 Всего: 14 |
А я еще вижу разницу в stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_UPDATABLE
Может CONCUR_UPDATABLE играть роль? Я как-то с этими параметрами не сталкивался. Я еще одна мысль, что JDBC драйвер у меня кривой. Завтра поставлю самый новый. Вот ведь грабли... |
|||
|
||||
| tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 31 Всего: 132 |
Средствами MySQL проблема решается таким образом:
Функция last_insert_id() встроена в MySQL. Возвращает значение, которое сгенерировано последним вызовом AUTO_INCREMENT в рамках данного соединения с БД. Если нужно переносимое, не зависящее от СУБД решение, придется поискать какой-то другой способ. |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Врядли он есть. Самым универсальным как раз был-бы способ с getGeneratedKeys(), т.к. он входит в JDBC API, но он по моему мало кем поддерживается. Ни Oracle ни Interbase его не поддерживают, MySQL судя по всему тоже. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| skif18 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 358 Регистрация: 17.5.2007 Где: Молдова, Кишинев Репутация: нет Всего: 1 |
Зато Postgres поддерживает. По-моему. А насчет других не знаю...
-------------------- |
|||
|
||||
| kkorsakoff |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 378 Регистрация: 18.10.2005 Где: Санкт-Петербург Репутация: 3 Всего: 14 |
Небольшая поправочка. MySQL все-таки стала поддерживать. Версию точную не скажу, но использовал я эту фичу еще примерно год назад
|
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |