Подтвердить что ты не робот

JCBC-соединение по умолчанию для автоматического управления

Я работаю с JDBC для подключения к Oracle. Я тестировал connection.setAutoCommit(false) vs connection.setAutoCommit(true), и результаты были такими, как ожидалось.

Пока соединение по умолчанию должно работать как autoCommit(true) [исправить меня, если я ошибаюсь], но ни одна из записей не вставлена ​​до вызова connection.commit(). Любые рекомендации относительно поведения по умолчанию?

String insert = "INSERT INTO MONITOR (number, name,value) VALUES (?,?,?)";

conn = connection; //connection  details avoided
preparedStmtInsert = conn.prepareStatement(insert);
preparedStmtInsert.execute();

conn.commit();
4b9b3361

Ответ 1

Из Документация Oracle JDBC:

Когда соединение создано, оно находится в режиме автоматической фиксации. Это означает что каждый отдельный оператор SQL рассматривается как транзакция и автоматически совершается сразу после его выполнения. (Чтобы быть более точный, по умолчанию используется оператор SQL, если он завершено, а не когда оно выполнено. Заявление завершается, когда все его результирующих наборов и подсчетов обновлений были получены. Почти во всех случаях, однако, выражение завершено и, следовательно, сразу после его выполнения.)

Другое дело - вы опускаете подробности создания соединения, поэтому я просто догадываюсь - если вы используете некоторые фреймворки или приобретаете соединение из источника данных или пула соединений, autocommit может быть повернут off на эти рамки/пулы/источники данных - решение заключается в том, чтобы никогда не доверять настройкам по умолчанию; -)