У меня есть таблица базы данных A, в которой хранятся записи, A имеет первичный ключ (recordid) с auto_increment, каждый раз, когда я вставляю запись в A, я получаю вставленную запись и сохраняю ее в другой masterTable.Получение последнего вставленного идентификатора записи таблицы базы данных в java?
Я использую оператор выбора, как только я сделать вставку в А, чтобы получить RecordId так:
выберите RecordID от A порядка по RecordId DESC LIMIT 1;
Но я столкнулся с проблемой на сегодняшний день, где в две записи были вставлены (разными потоками) в то же время и я в конечном итоге хранить неправильно RecordId в основной идентификатор (тот же RecordId для обоих txns)
Я слышал о Statement.getGeneratedKeys(), я хотел бы знать, действительно ли это помогает решить проблему. Или что это лучший способ справиться с этим.
Если драйвер JDBC MySQL реализует его. –
Это правда. Если драйвер JDBC не поддерживает его, для получения идентификатора вам необходимо использовать методы, специфичные для базы данных. – kgiannakakis
@kgiannakakis - 'session.save (myTable)' не возвращает 'int'. Однако он возвращает 'java.io.serializable', а метод getGeneratedKeys()' не поддерживается какой-либо реализацией драйверов JDBC до сих пор. Поэтому ни один из двух случаев, которые вы упомянули, не будет успешным, как очевидный. Действительно ли они работают? – Lion