Какой драйвер JDBC вы используете? Есть только один встроенный в дистрибутив Android?
Проблема, скорее всего, связана с java.sql.Connection#setAutoCommit()
. Если в соединении уже включена функция auto-commit & mdash; это можно проверить с помощью Connection#getAutoCommit()
& mdash; тогда ваш драйвер JDBC уже выдает команды SQL для запуска транзакции перед вашей попыткой вручную делать, что делает вашу ручную команду излишней и недействительной.
Если вы хотите контролировать экстент транзакции, вам нужно отключить режим автоматической фиксации для Connection
, вызвав
connection.setAutoCommit(false);
и затем, после того как все ваши отдельные операторы DML будут выполнены, либо подтвердите, либо откатите активную транзакцию с помощью Connection#commit()
или Connection#rollback()
.
Я заметил, что некоторым драйверам JDBC сложно согласовать режим auto-commit с PreparedStatement
методами, связанными с пакетами. В частности, драйвер Xerial JDBC и драйвер Zentus , на котором он основан, ведут борьбу с пользователем, контролирующим режим auto-commit с выполнением пакетного оператора.