Что произойдет, если я уроню какой-нибудь «специальный» текст? Таблицы SQLite

Во-первых, некоторая справочная информация, может быть, кто-то предлагает какой-то лучший способ, чем я пытаюсь сделать. Мне нужно экспортировать базу данных SQLite в текстовый файл. Для этого я должен использовать C ++ и выбрать использование CppSQLite lib.

Я собираю запросы на создание и после этого экспортирую данные каждой таблицы, проблема в том, что есть таблицы sqlite_sequence а также sqlite_statN, Во время импорта я не могу создать эти таблицы, потому что они имеют специальное назначение, поэтому основной вопрос, повлияет ли это на стабильность, если эти таблицы исчезнут?

Другая часть вопроса. Есть ли способ экспортировать и импортировать базу данных SQLite с использованием CppSQLite или любой другой библиотеки SQLite для C ++?

Постскриптум Решение для копирования файла базы данных не подходит в этой конкретной ситуации.

1

Решение

Имена объектов, начинающиеся с sqlite_ зарезервированы; вы не можете создавать их напрямую, даже если бы захотели. (Но вы изменяете содержимое некоторых из них, и вы можете отбросить sqlite_stat* таблицы.)

sqlite_sequence таблица создается автоматически при создании таблицы со столбцом AUTOINCREMENT.
Запись для фактического значения последовательности таблицы создается, когда она требуется в первую очередь.
Если вы хотите сохранить / восстановить значение последовательности, вы должны заново вставить старое значение.

sqlite_stat* таблицы созданы АНАЛИЗОМ.
Запуск ANALYZE после импорта текста SQL будет самым простым, но медленным; быстрее будет создать пустой sqlite_stat* таблица, запустив ANALYZE для таблицы, которая не будет проанализирована (например, sqlite_master), а затем вставьте старые записи вручную.

Все это реализовано в .dump командование sqlite3 инструмент командной строки (исходный код в shell.c):

SQLite version 3.8.4.3 2014-04-03 16:53:12
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> create table t(x integer primary key autoincrement);
sqlite> insert into t default values;
sqlite> insert into t default values;
sqlite> analyze;
sqlite> .dump
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE t(x integer primary key autoincrement);
INSERT INTO "t" VALUES(1);
INSERT INTO "t" VALUES(2);
ANALYZE sqlite_master;
INSERT INTO "sqlite_stat1" VALUES('t',NULL,'2');
DELETE FROM sqlite_sequence;
INSERT INTO "sqlite_sequence" VALUES('t',2);
COMMIT;
sqlite>
1

Другие решения