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

Java и базы данных

Войти
Регистрация
Восстановить пароль
 
 
Nike Jagger
37 / 37 / 0
Регистрация: 08.03.2012
Сообщений: 233
#1

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

06.12.2016, 23:41. Просмотров 620. Ответов 16
Метки нет (Все метки)

Столкнулся с проблемой, и не понимаю из-за чего...
Дело в том, что к одной таблице не проходят запрос на обновление и удаление, хотя к другим таблицам все запросы на обновление и удаление проходят на ура.
Я уж грешить начал, что не правильно запрос составил, или объект нужный не создается, но проверив через брейкпоинты, убедился, что все в порядке.
Просто, что удивительно к другим таблицам все 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;
    }
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.12.2016, 23:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не проходят запросы к sqlite, ошибка: The database file is locked (database is locked) (Java БД):

.NET 3.x SQLte ошибка при выполнении команд: Database file is locked - Visual Basic .NET
Когда я говорю SQLite выполнить мою команду: Public Function testik() Dim myConnection As New SQLiteConnection("Data...

SQLite database is locked - Базы данных
Никак не могу понять причину этой ошибки, вроде всё работало, а тут раз и она =)

Delphi SQLite database is locked - Delphi БД
Добрый день. Сразу скажу: форумы читал, гуглил. Ничего не помогло. Ситуация такая: Не могу понять, как при использовании...

database is locked Unable to fetch row SQLite - C++ Qt
Всем привет! Следующая проблема Программа, аналог UpdateScannera'a в FireFox Цель - сканировать сайты на предмет наличия новых...

Странное поведение sqlite - database is locked в 50% случаев - C#
Выполняется обычный запрос: "UPDATE results SET isReaded = @isread WHERE id = @id;". Когда я просто хочу это сделать, вылетает database is...

SQLite Ошибка записи в БД database is locked - PHP БД
Вот весь скрипт, не понимаю почему бд заблокирована. Как исправить эту проблему ??? <html> <head> </head> <body> <form...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
LeX
264 / 264 / 71
Регистрация: 30.06.2010
Сообщений: 994
07.12.2016, 08:48 #2
Цитата Сообщение от Nike Jagger Посмотреть сообщение
org.sqlite.SQLiteException: [SQLITE_BUSY] The database file is locked (database is locked)
четко и ясно написано же что файл базы залочен. у тебя не запущены еще экземпляры программы или другое ПО? например для просмотра содержимого базы
0
Nike Jagger
37 / 37 / 0
Регистрация: 08.03.2012
Сообщений: 233
07.12.2016, 10:26  [ТС] #3
LeX, запущен один экземпляр программы, субд тоже не запущено. тем более вся программа работает как часики, но как только нужно обновить или удалить запись этой сущности выкидывает ошибку
0
LeX
264 / 264 / 71
Регистрация: 30.06.2010
Сообщений: 994
07.12.2016, 10:30 #4
вся база в 1 файле?
0
Nike Jagger
37 / 37 / 0
Регистрация: 08.03.2012
Сообщений: 233
07.12.2016, 11:59  [ТС] #5
LeX, да. один файл бд
0
LeX
264 / 264 / 71
Регистрация: 30.06.2010
Сообщений: 994
07.12.2016, 12:17 #6
а connection как создаешь? в каких местах и сколько раз
0
Nike Jagger
37 / 37 / 0
Регистрация: 08.03.2012
Сообщений: 233
07.12.2016, 12:37  [ТС] #7
LeX, я сейчас не дома, к сожалению, код сейчас скинуть не могу, опишу так. есть класс датасоурс с приватным конструктором, где прописываются параметры конекшнпула и подключения к бд. в нем два метода гетинстанс и гет конекшн статические, по сути реализация паттерна синглтон. потом в абстрактном классе дао, от которого наследуются остальные классы реализации сущностей дао, создаются экземпляры классов connection и prepearedstatement.
как-то так...

Добавлено через 3 минуты
т.е коннекш у меня один и создается один раз
0
LeX
264 / 264 / 71
Регистрация: 30.06.2010
Сообщений: 994
07.12.2016, 12:41 #8
Цитата Сообщение от Nike Jagger Посмотреть сообщение
создаются экземпляры классов connection и prepearedstatement.
Цитата Сообщение от Nike Jagger Посмотреть сообщение
т.е коннекш у меня один и создается один раз
что-то не клеется. в твоем случае нужно всегда 1 соединение, отключи c3po - тебе не нужен пул, т.к. соединение одно - создавай его руками и запихни в синглтон.
0
Nike Jagger
37 / 37 / 0
Регистрация: 08.03.2012
Сообщений: 233
07.12.2016, 12:48  [ТС] #9
LeX, экземпляр класса коннекшн - один, и препередстэйтмент - один. инициализируются в одном абстрактном классе.
коннекшн пул не могу убрать, т.к. это одно из условий к задаче по предмету. я через консоль пробовал в отдельном классе через мейн метод, создал экземпляры класса дао нужной сущности и вызвал методы обновиться и удалить все проходило. через gui не проходят

Добавлено через 49 секунд
может синглтон убрать?
0
LeX
264 / 264 / 71
Регистрация: 30.06.2010
Сообщений: 994
07.12.2016, 12:53 #10
нужно смотреть код, глаза как у Грюма у меня нет
0
TurboDuck
41 / 41 / 11
Регистрация: 23.11.2015
Сообщений: 364
07.12.2016, 13:11 #11
The database file is locked (database is locked)
Под каким пользователем подключаетесь к базе? В его ролях точно есть доступ к БД и данной схеме?

Вот методы на обновление и удаление сущности из бд.
Зачем эти CRUD методы нам? Подключение и права проверь, а не методы удаления/записи.
0
Nike Jagger
37 / 37 / 0
Регистрация: 08.03.2012
Сообщений: 233
08.12.2016, 09:27  [ТС] #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 и в ней создавал таблицы
0
LeX
264 / 264 / 71
Регистрация: 30.06.2010
Сообщений: 994
08.12.2016, 09:41 #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 в серверном режиме, вроде умеет
1
Nike Jagger
37 / 37 / 0
Регистрация: 08.03.2012
Сообщений: 233
08.12.2016, 10:08  [ТС] #14
Цитата Сообщение от LeX Посмотреть сообщение
в твоем случае метод вернет новое соединение из 10 возможных, если 10 соединений открыто, то метод перейдет на сколько помню в ожидание.
и это нифига не синглтон)
с матчастью траблы)
Цитата Сообщение от LeX Посмотреть сообщение
результат присвой полю в DataSource, по примеру с самим датасорсом и будет тебе счастье
да спасибо все заработало)
т.е. получается, что пул создавал кучу соединений, и смысла тип в синглтоне нету, да?
0
LeX
264 / 264 / 71
Регистрация: 30.06.2010
Сообщений: 994
08.12.2016, 10:09 #15
да.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.12.2016, 10:09
Привет! Вот еще темы с ответами:

SQLite Database is locked - C#
Здравствуйте, при попытке закрыть форму возникает "database is locked" в меню - выход, при нажатии на крестик все нормально, в чем дело...

SQLite DataBase - почему подчеркивает DataBase db: пишет (DataBase cannot be resolved to a type) - Программирование Android
Здравствуйте! помогите понять почему подчеркивает DataBase db; пишет (DataBase cannot be resolved to a type), чем это можно исправить ...

SQLite Ошибка записи в БД SQLITE unable to open database file - PHP БД
Простой код записи в бд <html> <head> </head> <body> <form method="POST" action=""> <input name="USERNAME"...

Ошибка при соединении с БД SQLite: Unable to open database file - C#
Здравствуйте. Пишу на С# в VS 2013. Нужно подключиться к локальной базе. Есть следующий код: string path =...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
08.12.2016, 10:09
Ответ Создать тему
Опции темы

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