Что означает сообщение об ошибке «Не удается выполнить фиксацию, когда включен автокоммит»? - PullRequest
4 голосов
/ 02 августа 2011

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

org.apache.ddlutils.DatabaseOperationException: org.postgresql.util.PSQLException: Cannot commit when autoCommit is enabled.

Полагаю, возможно, поскольку каждый поток выполняется параллельно, два потока пытаются писать одновременно и выдают эту ошибку.

Как вы думаете, это тот случай, если нет, что может быть причиной этой ошибки?

В противном случае, если то, что я сказал, является проблемой, что я могу сделать, чтобы исправить это?

1 Ответ

8 голосов
/ 02 августа 2011

В вашем коде jdbc вы должны отключить автокоммит, как только получите соединение.Как то так:

DataSource datasource = getDatasource(); // fetch your datasource somehow
Connection c = null;
try{
  c = datasource.getConnection();
  c.setAutoCommit(false);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...