Sqlite + Java: таблица не обновляется - PullRequest
2 голосов
/ 18 марта 2010

Я использую оболочку Java для SQLite, которая называется SQLiteJDBC - это может иметь какое-то отношение к любым ответам ...

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

Statement stmt = connection.createStatement();
stmt.execute("update 'tableName' set 'fieldName'=1 where userid=1");

int updateCount = stmt.getUpdateCount();

Мое соединение допустимо, не выдается никаких исключений, и getUpdateCount () возвращает '1', указывая, что одна строка была обновлена.Однако моя таблица не обновляется.Я провел последние несколько часов, пытаясь понять, что происходит, но мне не повезло.Помогите !!

ОБНОВЛЕНИЕ

Кажется, проблема в том, что я не выполняю внесенные изменения.Пока приложение работает, мои изменения видны, но как только я закрываю приложение и снова открываю его или проверяю базу данных, мои изменения теряются, и мы возвращаемся к исходной точке.Что происходит ??!

Для автоматической фиксации задано значение true, а если установить для нее значение false и попытаться зафиксировать, я получу исключение.

Ответы [ 2 ]

5 голосов
/ 29 марта 2010

Моя проблема заключалась в том, что я полагался на сборщик мусора для очистки моих использованных ResultSets, я не закрывал их явно.

При доступе SQLite к таблице блокируется вся база данных, поэтому эти использованные ResultSets, которые все еще были «открыты», препятствовали получению доступа на запись в таблицу после того, как я прочитал ее содержимое.

Если у вас есть эта проблема и вы используете SQLite, просто вызовите close () для каждого ResultSet, когда вы закончите с ним. (Вы также можете попытаться сделать то же самое с любыми PreparedStatements, я предполагаю, что они также закроют все ResultSets, которые они использовали для создания, но я не экспериментировал, чтобы проверить это.)

3 голосов
/ 18 марта 2010

Я попробовал ваш пример, используя sqlitejdbc-v056.jar , и он работал нормально, даже с использованием одинарных кавычек.


Вы можете переписать свой вызов, чтобы использовать executeUpdate, но это не должно иметь значения:

int updateCount =
      stmt.executeUpdate("update 'tableName' set 'fieldName'=1 where userid=1");


Обязательно используйте setAutoCommit (по умолчанию следует true в любом случае)

connection.setAutoCommit(true);

или выполнить commit явно после обновления:

connection.commit();


Дважды проверьте, что вы подключаетесь к нужной базе данных. Если проблема все еще не решена, попробуйте выполнить обновление SELECT для этой записи до и после , чтобы проверить, изменилось ли значение.


Оригинальный ответ :

Вы пытались удалить одинарные кавычки вокруг tableName и fieldName?

В противном случае они будут рассматриваться как строки, что не имеет смысла. Из документации:

Строковая константа формируется заключением строки в одинарные кавычки (')

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