2010-04-05 3 views
9

Мы используем sqlite056.jar в нашем коде. При вставке в базу данных в пакете мы получаем исключение на линии, когда мы собираемся совершить.java.sql.SQLException: база данных заблокирована

строк кода

<object of Connection>.commit(); 
<object of Connection>.setAutoCommit(true); 

Исключение

java.sql.SQLException: database locked 

ответ

2

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

+0

мы можем работать с несколькими таблицами базы данных в том же время с такой же соединением объект базы данных предположат, что я вставил значение в таблице 1 и в том же время также вставленное значение в таблице 2 базы данных с таким же объектом данных базовое соединение. – rajkumari

+0

или произошло исключение блокировки базы данных из-за obj Connection.commit() line – rajkumari

7

Чтение базы данных SQLite устанавливает состояние блокировки в общий. Одновременно можно активировать несколько считывателей.

Запись в базу данных SQLite устанавливает условие блокировки в значение «Исключительно». В то время никакие другие процессы не могут быть активными.

Вы можете найти подробное объяснение по http://www.sqlite.org/lockingv3.html

+0

У меня была такая же ошибка при запуске апплета (который обращался к sqlite db) с помощью appletviewer. Но только при работе под 64-битным jvm. Переход на 32-битный jvm работал отлично (окна). Вероятно, 64-битный драйвер не был скомпилирован в банку. – dgorissen

9

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

0

В моем случае я забыл добавить предложение WHERE в моем запросе UPDATE, и это дает «заблокированной базе данных».

Тщательно проверьте свои запросы.

Edit: я забыл указать, что я использовал тип UPDATE запроса, в котором я меняющегося несколько атрибутов:

UPDATE Пользователи SET вес = 160, desiredWeight = 145 WHERE ID = 1;

+1

** Очень старый вопрос ** - но спасибо за попытку ответить на него. В этом конкретном случае вы не имели ни малейшего представления о том, как выглядел оператор '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' То, что было бы более уместным в этом случае, заключалось в том, чтобы спросить (в комментарии), как выглядел запрос SQL, - намекая, что причина может быть чем-то подобным отсутствующему предложению «WHERE». – ishmaelMakitla

+0

Я добавил редактирование на свой пост. Я думаю, что не имеет значения, как долго вопрос, люди googles для этой проблемы, как и я. Приветствую! –

+0

Хорошая точка. Что касается оператора SQL, я имел в виду, что сам вопрос не включал инструкцию SQL, поэтому вы не знали бы (не спрашивая ее), как это выглядело. Но хороший момент для ответа на старые вопросы - хороший момент. – ishmaelMakitla