Название: возможно ли несколько подключений к базе в памяти? Отправлено: ilyagoo от Ноябрь 24, 2010, 16:26 в доках написано, что соединение с БД может использоваться только из нити, в которой оно создано.
можно ли при работе с БД в памяти создать два соединения в разных нитях? как? спасибо. Название: Re: возможно ли несколько подключений к базе в памяти? Отправлено: Пантер от Ноябрь 24, 2010, 16:44 Можешь клонировать подключение.
Название: Re: возможно ли несколько подключений к базе в памяти? Отправлено: ilyagoo от Ноябрь 24, 2010, 16:54 в одной нити создал подключение, создал таблицу.
в другой клонировал подключение и запросил таблицы. там их нет. создалась копия базы? Название: Re: возможно ли несколько подключений к базе в памяти? Отправлено: Пантер от Ноябрь 24, 2010, 16:59 1. Ты можешь во всех потоках использовать одно подключение (QSqlDatabase QSqlDatabase::database ( const QString & connectionName = QLatin1String( defaultConnection ), bool open = true ) [static]).
2. При клонировании задал новое имя? Покажи код. Название: Re: возможно ли несколько подключений к базе в памяти? Отправлено: ilyagoo от Ноябрь 24, 2010, 17:08 1) возвращенное соединение можно считать созданным в этой нити.
2) gui-нить: Код: m_Database = QSqlDatabase::addDatabase( "QSQLITE", "db_gui" ); фоновая нить Код: m_Database = QSqlDatabase::cloneDatabase( QSqlDatabase::database( "db_gui" ), "db_background" ); Название: Re: возможно ли несколько подключений к базе Отправлено: Пантер от Ноябрь 24, 2010, 17:20 В фоновой нити используй
Код
Название: Re: возможно ли несколько подключений к базе в памяти? Отправлено: ilyagoo от Ноябрь 24, 2010, 17:28 а это позволит использовать соединение безопасно без критических секций?
Название: Re: возможно ли несколько подключений к базе в памяти? Отправлено: Пантер от Ноябрь 24, 2010, 17:34 Что значит безопасно?
Название: Re: возможно ли несколько подключений к базе в памяти? Отправлено: ilyagoo от Ноябрь 24, 2010, 17:36 в одной нити писать, в другой - читать
Название: Re: возможно ли несколько подключений к базе в памяти? Отправлено: Пантер от Ноябрь 24, 2010, 17:50 SQLite сама по себе однопользовательская... Попробуй. :)
Название: Re: возможно ли несколько подключений к базе в памяти? Отправлено: ilyagoo от Ноябрь 24, 2010, 17:53 что есть однопользовательская в данном контексте? соединение же объект Qt, он же должен это как-то контролировать...
Название: Re: возможно ли несколько подключений к базе в памяти? Отправлено: Пантер от Ноябрь 24, 2010, 18:01 SQLite не поддерживает больше одного соединения на файл, на сколько я помню. Т.е. поддерживает, но не совсем.
Я лично юзал с одним подключением - все работало. Название: Re: возможно ли несколько подключений к базе в памяти? Отправлено: ilyagoo от Ноябрь 24, 2010, 18:06 а другие БД, например, постгрес можно создать в памяти?
Название: Re: возможно ли несколько подключений к базе в памяти? Отправлено: BRE от Ноябрь 24, 2010, 18:15 Информация по SQLite: http://www.sqlite.org/threadsafe.html
Название: Re: возможно ли несколько подключений к базе в памяти? Отправлено: Kolobok от Ноябрь 24, 2010, 18:28 Цитировать Threads and the SQL Module A connection can only be used from within the thread that created it. Moving connections between threads or creating queries from a different thread is not supported. Я тоже думал, почему они пишут, что нельзя, если работает. Даже здесь народ спрашивал. Пока в одном проекте не пришлось с большими обьемами данных работать. Один поток писал в базу, другой читал, и все это довольно интенсивно. И тут данные стали пропадать. Немного, но клиенту почему-то не нравилось. cloneDatabase() это дело исправил. Название: Re: возможно ли несколько подключений к базе в памяти? Отправлено: ilyagoo от Ноябрь 25, 2010, 09:13 cloneDatabase() это дело исправил. вроде cloneDatabase() создает клон соединения, почему тогда в коде выше база пустая? Название: Re: возможно ли несколько подключений к базе в памяти? Отправлено: Пантер от Ноябрь 25, 2010, 09:54 После клонирования open выдает какие-нибудь ошибки?
Название: Re: возможно ли несколько подключений к базе в памяти? Отправлено: ilyagoo от Ноябрь 25, 2010, 10:04 нэт. открытие происходит успешно. но таблиц в базе нет.
Название: Re: возможно ли несколько подключений к базе в памяти? Отправлено: Пантер от Ноябрь 25, 2010, 10:27 Интересно. Сейчас проверил: если создавать базу в памяти, то клонирование не канает. Если :memory: заменить на имя файла, то все отлично работает. Возможно, ограничение базы в памяти?
Название: Re: возможно ли несколько подключений к базе в памяти? Отправлено: ilyagoo от Ноябрь 25, 2010, 10:38 похоже на то((
а как заметил Kolobok, юзать одно соединение некорректно Название: Re: возможно ли несколько подключений к базе в памяти? Отправлено: ilyagoo от Ноябрь 25, 2010, 11:15 нашел ветку без кода, но товарищ говорит о том, что решил проблему. вот только как...
http://www.qtcentre.org/threads/28780-QSqlite-multiple-connections-to-in-memory-database (http://www.qtcentre.org/threads/28780-QSqlite-multiple-connections-to-in-memory-database) |