Безопасен ли поток getRow () в Java.sql? - PullRequest
1 голос
/ 13 октября 2010

Допустим, у меня есть большое количество потоков, вставляемых в базу данных mysql с использованием Java.sql.После того, как я выполню вставку, я хотел бы знать первичный ключ записи, которую я только что вставил.Я мог бы использовать getRow () в ResultSet, возвращенном запросом вставки.Тем не менее, эта тема безопасна?Или мне следует запустить другой оператор select, чтобы найти первичный ключ только что вставленной записи?

Ответы [ 2 ]

3 голосов
/ 13 октября 2010

ResultSet не размещает рекламу на javadoc как поточно-ориентированную, поэтому предположим, что это НЕТ. Если у вас есть 10 потоков, которые вставляют, и каким-то образом они получают ОДИНАКОВЫЙ набор результатов .. что-то странное случится (или, по крайней мере, не гарантирует правильность).

Однако, если у вас есть 10 потоков, каждый из которых выполняет свою СОБСТВЕННУЮ вставку, и каждый из них имеет свой собственный ResultSet ... у вас все в порядке. Помните, что безопасность потоков часто связана с совместным использованием одного и того же OBJECT, а не только одного и того же класса. ArrayList НЕ является потокобезопасным, но если у вас есть 10 различных потоков с 10 различными ArrayList, у вас все в порядке. То же самое здесь с ResultSet.

0 голосов
/ 13 октября 2010

Я не думаю, что getRow () должен быть правильным.getId () будет моим выбором, потому что идентификатор строки может не совпадать с сгенерированным первичным ключом.

Я не верю, что любая реализация в java.sql является поточно-ориентированной;Связи конечно нет.

Обязательно сделайте ВСТАВКУ в контексте транзакции.

Вам необходимо обратить внимание на уровень своей изоляции.Проверьте javadocs на java.sql.Connection, если вы не знаете, что это значит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...