答案 0 :(得分:9)
Api似乎没有任何转储功能(http://www.sqlite.org/capi3ref.html),但您可以通过以下方式构建转储:
创建一个新函数,该函数将使用sqlite3_exec()
或sqlite3_get_table()
的缓冲结果并将其转储到文件*
使用Sqlite源代码中提供的转储功能,您可以在(shell.c
)中找到它。
编辑:添加此示例
/* TODO : This is just a sample code, modify it to meet your need */
void select_and_dump_sqlite3_table(sqlite3 *dbh)
{
FILE *dump_file;
int i;
sqlite3_stmt *stmt;
dump_file = fopen(path_to_dump_file, "w");
if (dump_file == NULL) {
/* Error handling with errno and exit */
}
sqlite3_prepare_v2(dbh, "SELECT name, address, phone FROM Person",
0, &stmt, NULL);
/* dump columns names into the file */
for (i = 0; i < 3; i++) {
fprintf (dump_file, "%30s | ", sqlite3_column_name(stmt, i));
}
printf ("\n");
/* Dump columns data into the file */
while (SQLITE_ROW == sqlite3_step(stmt)) {
for (i = 0; i < 3; i++) {
fprintf (dump_file, "%30s | ", sqlite3_column_text (stmt, i));
}
printf ("\n");
}
/* We're ready to leave */
sqlite3_finalize (stmt);
}
答案 1 :(得分:3)
您可以执行SELECT * FROM sqlite_master
获取所有表和索引(每行有一个type
列,表格为'table'
,索引为'index'
,一个sql
列,其中包含用于创建该表/索引的sql语句。
然后,对于sqlite_master
中找到的每个表,SELECT *
中的每个表(每个sqlite_master
行都有一个name
列)并写出表中的所有数据。< / p>
有关详细信息,请参阅SQLite FAQ和command line shell页面。
答案 2 :(得分:0)
我不知道是否有预制工具,但您可以自己实施。
首先,通过阅读主表来获取模式。之后,您将拥有数据库模式(表名和列)。您将能够自动读取所有数据并为其构建SQL。这不应该太难实现。