调试环境:
ubuntu 16.04
Android sdk 7.1.1 / platform-tools sqlite3
无需手动创建db文件,直接在命令行执行:
~/test_sqlite$ sqlite3 test.db
sqlite> create table test_table (id integer primary key, name text, description text);
sqlite> .exit
看到对应目录下,db文件“test.db”已经被自动创建。再打开,检查一下刚刚创建的表:
~/test_sqlite$ sqlite3 test.db
SQLite version 3.9.2 2015-11-02 18:31:45
Enter ".help" for usage hints.
sqlite> .tables
test_table
sqlite> .schema test_table
CREATE TABLE test_table (id integer primary key, name text, description text);
向test_table中插入一些数据:
sqlite> insert into test_table (id, name, description) values (0, 'name0', 'des0');
sqlite> insert into test_table (id, name, description) values (1, 'name1', 'des1');
sqlite> insert into test_table (id, name, description) values (2, 'name2', 'des2');
sqlite>
sqlite>
sqlite> select * from test_table;
0|name0|des0
1|name1|des1
2|name2|des2
首先,重定向sqlite输出到文件。同样不需要手动创建文件,直接给出文件名即可:
sqlite> .output test_table.sql
sqlite> .dump test_table
重定向输出回标准命令行输出:
sqlite> .output stdout
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE test_table (id integer primary key, name text, description text);
INSERT INTO "test_table" VALUES(0,'name0','des0');
INSERT INTO "test_table" VALUES(1,'name1','des1');
INSERT INTO "test_table" VALUES(2,'name2','des2');
COMMIT;
从test_table.sql文件内容可以看到,其中包含了DDL——create table,DML——insert values,并且在一个数据库事务中完成。
利用(2)中导出的数据库dump信息,批量执行其中的SQL:
sqlite> BEGIN TRANSACTION;
CREATE TABLE test_table (id integer primary key, name text, description text);
INSERT INTO "test_table" VALUES(0,'name0','des0');
INSERT INTO "test_table" VALUES(1,'name1','des1');
INSERT INTO "test_table" VALUES(2,'name2','des2');sqlite>
COMMIT;
sqlite> .tables
test_table
sqlite> select * from test_table;
0|name0|des0
1|name1|des1
2|name2|des2
看到表test_table被克隆恢复。
可以用read命令来直接读取(2)中dump导出的文件test_table.sql,完成数据库导入:
sqlite> drop table test_table;
sqlite> .tables
sqlite>
sqlite> .read test_table.sql
sqlite> .tables
test_table
sqlite> select * from test_table;
0|name0|des0
1|name1|des1
2|name2|des2