Russian Qt Forum

Qt => Базы данных => Тема начата: alex-v от Сентябрь 25, 2010, 15:06



Название: как скопировать БД?
Отправлено: alex-v от Сентябрь 25, 2010, 15:06
есть база данных sqlite в памяти.

Код:
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "memoryDB");
db.setDatabaseName(":memory:");

Требуется сделать точную её копию в файл на диске. Как бы это реализовать?


Название: Re: как скопировать БД?
Отправлено: Denjs от Сентябрь 25, 2010, 16:18
Cоздать вторую БД на диске и перегрузить дамп. по моему так.

Вроде как можно и сразу (не проверял, см ccылки )
типа так:
Код:
ATTACH DATABASE New.db AS new;
CREATE TABLE new.stuff AS (SELECT * FROM table)
http://ru.efreedom.com/Question/1-566009/%D0%94%D0%B0%D0%BC%D0%BF-%D1%82%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE-%D1%87%D0%B0%D1%81%D1%82%D0%B8-%D0%B1%D0%B0%D0%B7%D1%8B-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85-sqlite

http://www.sqlite.org/lang_attach.html


Название: Re: как скопировать БД?
Отправлено: alex-v от Сентябрь 25, 2010, 17:01
Cоздать вторую БД на диске и перегрузить дамп. по моему так.

а как это реализовать? пример кода можно?

Цитировать
Вроде как можно и сразу (не проверял, см ccылки )

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

p.s. Что-то не могу также понять, для чего нужно "ATTACH DATABASE" ...


Название: Re: как скопировать БД?
Отправлено: lit-uriy от Сентябрь 25, 2010, 17:31
>>для чего нужно "ATTACH DATABASE"
ATTACH - прикрепить
прикрепляет одну БД к другой, и тогда с таблицами можно работать, как если бы они были в одной БД


Название: Re: как скопировать БД?
Отправлено: alex-v от Сентябрь 25, 2010, 17:40
ATTACH - прикрепить
прикрепляет одну БД к другой, и тогда с таблицами можно работать, как если бы они были в одной БД

спасибо за разъяснение, только не могу что-то сообразить как мне этим пользоваться в моём случае... может кто поможет?


Название: Re: как скопировать БД?
Отправлено: Marat(Qt) от Сентябрь 25, 2010, 18:23
Вариант:
взять QSqlQuery(пусть будет query1) прикрепленный к базе ":memory:" и QSqlQuery, прикрепленный к "file.sql"(query2).
С помощью query1 делаете "SELECT * FROM table_name", потом с помощью query2 делаете "INSERT INTO ..." используя данные из query1.

Как я понял, выше вам предлагали более изящный вариант. Хотя я с трудом представляю его в Qt. В моем понимании - один QSqlQuery работает с одной БД, но никак не с двумя.


Название: Re: как скопировать БД?
Отправлено: alex-v от Сентябрь 25, 2010, 18:28
Вариант:
взять QSqlQuery(пусть будет query1) прикрепленный к базе ":memory:" и QSqlQuery, прикрепленный к "file.sql"(query2).
С помощью query1 делаете "SELECT * FROM table_name", потом с помощью query2 делаете "INSERT INTO ..." используя данные из query1.

Как я понял, выше вам предлагали более изящный вариант. Хотя я с трудом представляю его в Qt. В моем понимании - один QSqlQuery работает с одной БД, но никак не с двумя.

можно и так. Но проблема в том, что так не получиться сделать точную копию БД. Ведь нам надо знать как таблица из источника создавалась (create table ...), с какими параметрами и т.п. Нужно еще как-то все индексы скопировать... Это всё нужно как-то учесть...


Название: Re: как скопировать БД?
Отправлено: alex-v от Сентябрь 25, 2010, 21:50
Обнаружил, что в системной таблице "sqlite_master" в БД хранится описание создания всех таблиц (create table...).
Это мне в помощь. Видимо надо делать в ручную - командами sql.
Спасибо участникам темы.


Название: Re: как скопировать БД?
Отправлено: Denjs от Сентябрь 26, 2010, 00:00
Обнаружил, что в системной таблице "sqlite_master" в БД хранится описание создания всех таблиц (create table...).
Это мне в помощь. Видимо надо делать в ручную - командами sql.
Спасибо участникам темы.
ух ты ^_^ )))
а в разделе документации http://www.sqlite.org/ есть много чего интересного )))) заглядывайте )...


Название: Re: как скопировать БД?
Отправлено: Marat(Qt) от Сентябрь 26, 2010, 02:05
Обнаружил, что в системной таблице "sqlite_master" в БД хранится описание создания всех таблиц (create table...).
Это мне в помощь. Видимо надо делать в ручную - командами sql.
Спасибо участникам темы.
ух ты ^_^ )))
а в разделе документации http://www.sqlite.org/ есть много чего интересного )))) заглядывайте )...
Вы это про документацию? Несколько неожиданный ответ


Название: Re: как скопировать БД?
Отправлено: Jo от Сентябрь 27, 2010, 19:06
Тоже возникала подобная задача.

Как сделать на с++: http://www.sqlite.org/backup.html
но именно средствами Qt не знаю..


Название: Re: как скопировать БД?
Отправлено: alex-v от Сентябрь 27, 2010, 19:20
все просто. В системной таблице sqlite_master - вся информация для экспорта (параметры таблиц и индексов).