В чем проблема в следующей последовательности кода Java / SQL? - PullRequest
4 голосов
/ 30 августа 2010

Я сделал обновление таблицы в доступе через код Java, и она не работает.Но когда я печатаю в консоль результат executeUpdate (), он показывает мне 1, но в базе данных изменений нет.Можете ли вы сказать мне, где проблема, пожалуйста?

System.out.println("here");
PreparedStatement st = conn.prepareStatement(
    "UPDATE StocProduseCuFactura SET cantitate = " +
    "cantitate - ? WHERE nume = ? and um = 'buc'");
st.setInt(1, cant);
st.setString(2, p.getNume());
System.out.println(st.executeUpdate());
st.close();

Я забыл сказать, если я запускаю этот код SQL в доступе, он работает.

Ответы [ 4 ]

1 голос
/ 30 августа 2010

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

Большое спасибо.

0 голосов
/ 30 августа 2010

Джонни Киз, вероятно, на правильном пути. Скорее всего, ваше соединение не настроено на автоматическую фиксацию транзакции, поэтому, когда вы закрываете ее, транзакция откатывается и ваше изменение удаляется.

Вы можете попробовать поставить

conn.setAutocommit(true); 

вверху, чтобы увидеть, если это имеет значение. Другая возможность - «не могу» - всегда ноль. В этом случае вы будете устанавливать cantitate = cantitate (то есть без изменений), но update будет по-прежнему сообщать о каждой строке, в которой было выполнено предложение "where".

0 голосов
/ 30 августа 2010

Как уже говорили другие, транзакция - это та область, на которой вам, возможно, придется сосредоточиться. Попробуйте установить для autoCommit значения true и false в явном виде и попробуйте запрос на обновление.

conn.setAutoCommit(true);

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

0 голосов
/ 30 августа 2010

Вы завершили транзакцию?

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