JDBC: я могу совместно использовать соединение в приложении многопоточности и наслаждаться хорошими транзакциями?

Это слишком долго для комментария.

Если вы хотите добавить столбцы в существующую таблицу, то синтаксис будет alter table. Например:

alter table add column TotalCloturé int;

Значения по умолчанию: NULL или вы можете указать постоянное значение по умолчанию (например, 0 в данном случае).

Вы не добавляете столбцы с запросом.

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

5
задан fulmicoton 14 November 2008 в 02:00
поделиться

2 ответа

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

Обратите внимание, что то же относится к любой сетевой связи. Если у Вас было два потока, пытающиеся совместно использовать один сокет с HTTP-соединением, например.

  • Поток 1 выполняет запрос
  • Поток 2 выполняет запрос
  • Распараллельте 1 байт чтений от сокета, невольно читая ответ из потока 2 запрос

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

Если большинство Ваших потоков имеет нечастую потребность в соединениях с базой данных (или никакая потребность вообще), Вы смогли определять один поток делать, Ваша работа базы данных, и иметь другие потоки ставит их запросы в очередь к тому одному потоку. Это уменьшило бы издержки такого количества соединений. Но необходимо будет выяснить, как управлять подключениями на поток в среде (или задать другой конкретный вопрос об этом на StackOverflow).

обновление: Для ответа на вопрос в комментарии большинство брендов базы данных не поддерживает несколько параллельных транзакций на единственном соединении (InterBase/Firebird является единственным исключением, которое я знаю).

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

Аналогично, стандартные API не зависящий от производителя продукта как JDBC и ODBC делают то же предположение, то состояние транзакции является просто свойством объекта соединения.

4
ответ дан 14 December 2019 в 13:50
поделиться

Это - нестандартная практика для открытия нового соединения для каждого потока. Обычно Вы используете пул соединения как c3po библиотека.

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

1
ответ дан 14 December 2019 в 13:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: