Форум программистов, компьютерный форум CyberForum.ru

Не проходят запросы к sqlite, ошибка: The database file is locked (database is locked) - Java БД

Восстановить пароль Регистрация
 
Nike Jagger
37 / 37 / 0
Регистрация: 08.03.2012
Сообщений: 225
06.12.2016, 23:41     Не проходят запросы к sqlite, ошибка: The database file is locked (database is locked) #1
Столкнулся с проблемой, и не понимаю из-за чего...
Дело в том, что к одной таблице не проходят запрос на обновление и удаление, хотя к другим таблицам все запросы на обновление и удаление проходят на ура.
Я уж грешить начал, что не правильно запрос составил, или объект нужный не создается, но проверив через брейкпоинты, убедился, что все в порядке.
Просто, что удивительно к другим таблицам все CRUD запросы работают, а к этой апдейт и удаление - нет.
Использую SQLite вкупе с пулом соединений c3p0.
вот что пишет мне в консоли
org.sqlite.SQLiteException: [SQLITE_BUSY] The database file is locked (database is locked)
at org.sqlite.core.DB.newSQLException(DB.java:920)
at org.sqlite.core.DB.newSQLException(DB.java:932)
at org.sqlite.core.DB.execute(DB.java:833)
at org.sqlite.core.DB.executeUpdate(DB.java:874)
at org.sqlite.jdbc3.JDBC3PreparedStatement.executeUpdate(JDBC3PreparedStatement.java:99)
at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:384)


Вот методы на обновление и удаление сущности из бд.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
@Override
    public boolean update(Worker Item) {
        try {
            preparedStatement = connection.prepareStatement("update workers set name = ?, adress = ?, phone_number = ?," +
                    " specialty = ?, rank = ?, salary = ?, id_workshop = ? where id = ?;");
            preparedStatement.setString(1, Item.getName());
            preparedStatement.setString(2, Item.getAdress());
            preparedStatement.setString(3, Item.getPhoneNumber());
            preparedStatement.setString(4, Item.getSpecialty());
            preparedStatement.setInt(5, Item.getRank());
            preparedStatement.setDouble(6, Item.getSalary());
            preparedStatement.setInt(7, Item.getIdWorkshop());
            preparedStatement.setInt(8, Item.getId());
            queryResult = SomeLogic.resultInspection(preparedStatement.executeUpdate());
        } catch (Exception e) {
            e.printStackTrace();
            System.exit(1);
        }
 
        return queryResult;
    }
 
    @Override
    public boolean delete(Worker Item) {
        try {
            preparedStatement = connection.prepareStatement("delete from workers where id = ?;");
            preparedStatement.setInt(1, Item.getId());
            queryResult = SomeLogic.resultInspection(preparedStatement.executeUpdate());
        } catch (Exception e) {
            e.printStackTrace();
            System.exit(1);
        }
 
        return queryResult;
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.12.2016, 23:41     Не проходят запросы к sqlite, ошибка: The database file is locked (database is locked)
Посмотрите здесь:

SQLite или подобное Java БД
Java БД При попытке openConnection() у Database выдает java.lang.NullPointerException
Java БД Java + database
Java БД NetBeans IDE 7.2. + Oracle DataBase 10g XE
Java БД Java с sqlite
SQLite неправильная кодировка Java БД
Java БД Клиент и сервер на SQLite
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
LeX
155 / 155 / 40
Регистрация: 30.06.2010
Сообщений: 631
07.12.2016, 08:48     Не проходят запросы к sqlite, ошибка: The database file is locked (database is locked) #2
Цитата Сообщение от Nike Jagger Посмотреть сообщение
org.sqlite.SQLiteException: [SQLITE_BUSY] The database file is locked (database is locked)
четко и ясно написано же что файл базы залочен. у тебя не запущены еще экземпляры программы или другое ПО? например для просмотра содержимого базы
Nike Jagger
37 / 37 / 0
Регистрация: 08.03.2012
Сообщений: 225
07.12.2016, 10:26  [ТС]     Не проходят запросы к sqlite, ошибка: The database file is locked (database is locked) #3
LeX, запущен один экземпляр программы, субд тоже не запущено. тем более вся программа работает как часики, но как только нужно обновить или удалить запись этой сущности выкидывает ошибку
LeX
155 / 155 / 40
Регистрация: 30.06.2010
Сообщений: 631
07.12.2016, 10:30     Не проходят запросы к sqlite, ошибка: The database file is locked (database is locked) #4
вся база в 1 файле?
Nike Jagger
37 / 37 / 0
Регистрация: 08.03.2012
Сообщений: 225
07.12.2016, 11:59  [ТС]     Не проходят запросы к sqlite, ошибка: The database file is locked (database is locked) #5
LeX, да. один файл бд
LeX
155 / 155 / 40
Регистрация: 30.06.2010
Сообщений: 631
07.12.2016, 12:17     Не проходят запросы к sqlite, ошибка: The database file is locked (database is locked) #6
а connection как создаешь? в каких местах и сколько раз
Nike Jagger
37 / 37 / 0
Регистрация: 08.03.2012
Сообщений: 225
07.12.2016, 12:37  [ТС]     Не проходят запросы к sqlite, ошибка: The database file is locked (database is locked) #7
LeX, я сейчас не дома, к сожалению, код сейчас скинуть не могу, опишу так. есть класс датасоурс с приватным конструктором, где прописываются параметры конекшнпула и подключения к бд. в нем два метода гетинстанс и гет конекшн статические, по сути реализация паттерна синглтон. потом в абстрактном классе дао, от которого наследуются остальные классы реализации сущностей дао, создаются экземпляры классов connection и prepearedstatement.
как-то так...

Добавлено через 3 минуты
т.е коннекш у меня один и создается один раз
LeX
155 / 155 / 40
Регистрация: 30.06.2010
Сообщений: 631
07.12.2016, 12:41     Не проходят запросы к sqlite, ошибка: The database file is locked (database is locked) #8
Цитата Сообщение от Nike Jagger Посмотреть сообщение
создаются экземпляры классов connection и prepearedstatement.
Цитата Сообщение от Nike Jagger Посмотреть сообщение
т.е коннекш у меня один и создается один раз
что-то не клеется. в твоем случае нужно всегда 1 соединение, отключи c3po - тебе не нужен пул, т.к. соединение одно - создавай его руками и запихни в синглтон.
Nike Jagger
37 / 37 / 0
Регистрация: 08.03.2012
Сообщений: 225
07.12.2016, 12:48  [ТС]     Не проходят запросы к sqlite, ошибка: The database file is locked (database is locked) #9
LeX, экземпляр класса коннекшн - один, и препередстэйтмент - один. инициализируются в одном абстрактном классе.
коннекшн пул не могу убрать, т.к. это одно из условий к задаче по предмету. я через консоль пробовал в отдельном классе через мейн метод, создал экземпляры класса дао нужной сущности и вызвал методы обновиться и удалить все проходило. через gui не проходят

Добавлено через 49 секунд
может синглтон убрать?
LeX
155 / 155 / 40
Регистрация: 30.06.2010
Сообщений: 631
07.12.2016, 12:53     Не проходят запросы к sqlite, ошибка: The database file is locked (database is locked) #10
нужно смотреть код, глаза как у Грюма у меня нет
TurboDuck
 Аватар для TurboDuck
32 / 32 / 10
Регистрация: 23.11.2015
Сообщений: 263
07.12.2016, 13:11     Не проходят запросы к sqlite, ошибка: The database file is locked (database is locked) #11
The database file is locked (database is locked)
Под каким пользователем подключаетесь к базе? В его ролях точно есть доступ к БД и данной схеме?

Вот методы на обновление и удаление сущности из бд.
Зачем эти CRUD методы нам? Подключение и права проверь, а не методы удаления/записи.
Nike Jagger
37 / 37 / 0
Регистрация: 08.03.2012
Сообщений: 225
08.12.2016, 09:27  [ТС]     Не проходят запросы к sqlite, ошибка: The database file is locked (database is locked) #12
LeX, вот код DataSource, где параметры подключения к бд
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package sample;
 
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.beans.PropertyVetoException;
import java.util.Properties;
 
import com.mchange.v2.c3p0.ComboPooledDataSource;
 
public class DataSource {
 
    private static DataSource datasource;
    private ComboPooledDataSource cpds;
 
    private DataSource() throws IOException, SQLException, PropertyVetoException {
        Properties p = new Properties(System.getProperties());
        p.put("com.mchange.v2.log.MLog", "com.mchange.v2.log.FallbackMLog");
        p.put("com.mchange.v2.log.FallbackMLog.DEFAULT_CUTOFF_LEVEL", "WARNING");
        System.setProperties(p);
        try {
            cpds = new ComboPooledDataSource();
            cpds.setDriverClass("org.sqlite.JDBC");
            cpds.setJdbcUrl("jdbc:sqlite:DB.db");
            cpds.setMinPoolSize(3);
            cpds.setAcquireIncrement(5);
            cpds.setMaxPoolSize(10);
            cpds.setMaxStatements(180);
        } catch (Exception e) {
            e.printStackTrace();
            System.exit(2);
        }
 
    }
 
    public static DataSource getInstance() throws IOException, SQLException, PropertyVetoException {
        if (datasource == null) {
            datasource = new DataSource();
            return datasource;
        } else {
            return datasource;
        }
    }
 
    public Connection getConnection() throws SQLException {
        return this.cpds.getConnection();
    }
}
Вот код, где создаются экземпляры классов Connection и PreparedStatement
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package dao.Impl;
 
import sample.DataSource;
 
import java.beans.PropertyVetoException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
 
public class OverallDaoImpl {
 
    public java.sql.Statement statement;
 
    public PreparedStatement preparedStatement;
 
    public Connection connection;
 
    public boolean queryResult;
 
    public OverallDaoImpl() throws PropertyVetoException, SQLException, IOException {
        this.connection = DataSource.getInstance().getConnection();
    }
 
}
Цитата Сообщение от TurboDuck Посмотреть сообщение
Под каким пользователем подключаетесь к базе? В его ролях точно есть доступ к БД и данной схеме?
Я вообще пользователей никаких не создавал, я запилил бд через sqliteStudio и в ней создавал таблицы
LeX
155 / 155 / 40
Регистрация: 30.06.2010
Сообщений: 631
08.12.2016, 09:41     Не проходят запросы к sqlite, ошибка: The database file is locked (database is locked) #13
Цитата Сообщение от Nike Jagger Посмотреть сообщение
экземпляр класса коннекшн - один
вранье чистой воды. так и думал:
Цитата Сообщение от Nike Jagger Посмотреть сообщение
cpds.setMinPoolSize(3);
* * * * * * cpds.setMaxPoolSize(10);
Цитата Сообщение от Nike Jagger Посмотреть сообщение
public Connection getConnection() throws SQLException {
* * * * return this.cpds.getConnection();
* * }
в твоем случае метод вернет новое соединение из 10 возможных, если 10 соединений открыто, то метод перейдет на сколько помню в ожидание.
и это нифига не синглтон)

Добавлено через 2 минуты
Цитата Сообщение от Nike Jagger Посмотреть сообщение
this.cpds.getConnection();
результат присвой полю в DataSource, по примеру с самим датасорсом и будет тебе счастье

только как я уже говорил от коннекшн пула смысла не будет.

выход - используй не embedded БД, подними постгрю или мускл, либо запусти sqlite в серверном режиме, вроде умеет
Nike Jagger
37 / 37 / 0
Регистрация: 08.03.2012
Сообщений: 225
08.12.2016, 10:08  [ТС]     Не проходят запросы к sqlite, ошибка: The database file is locked (database is locked) #14
Цитата Сообщение от LeX Посмотреть сообщение
в твоем случае метод вернет новое соединение из 10 возможных, если 10 соединений открыто, то метод перейдет на сколько помню в ожидание.
и это нифига не синглтон)
с матчастью траблы)
Цитата Сообщение от LeX Посмотреть сообщение
результат присвой полю в DataSource, по примеру с самим датасорсом и будет тебе счастье
да спасибо все заработало)
т.е. получается, что пул создавал кучу соединений, и смысла тип в синглтоне нету, да?
LeX
155 / 155 / 40
Регистрация: 30.06.2010
Сообщений: 631
08.12.2016, 10:09     Не проходят запросы к sqlite, ошибка: The database file is locked (database is locked) #15
да.
Nike Jagger
37 / 37 / 0
Регистрация: 08.03.2012
Сообщений: 225
08.12.2016, 10:10  [ТС]     Не проходят запросы к sqlite, ошибка: The database file is locked (database is locked) #16
LeX, а вот например, если бы бд была мускл, тогда бы старый код работал как надо?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.12.2016, 10:11     Не проходят запросы к sqlite, ошибка: The database file is locked (database is locked)
Еще ссылки по теме:

Java БД Установка Oracle Database 12c(Linux)
Пример работы с Oracle Database Java БД
Робота с БД SQLite Java БД
Java and SQLite (дата) Java БД
Java БД Работа с SQLite

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
LeX
155 / 155 / 40
Регистрация: 30.06.2010
Сообщений: 631
08.12.2016, 10:11     Не проходят запросы к sqlite, ошибка: The database file is locked (database is locked) #17
да.
Yandex
Объявления
08.12.2016, 10:11     Не проходят запросы к sqlite, ошибка: The database file is locked (database is locked)
Ответ Создать тему
Опции темы

Текущее время: 08:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru