天天看點

SQLite實用武器庫(1)利用dump指令和read指令導出資料、導入資料

調試環境:

ubuntu 16.04

Android sdk 7.1.1 / platform-tools sqlite3

(1)建立資料庫檔案

無需手動建立db檔案,直接在指令行執行:

~/test_sqlite$ sqlite3 test.db
           

進入SQLIte指令行,直接使用标準SQL建表:

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
           

當然,還可以用schema指令檢視一下更詳細的資訊:

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
           

(2)利用dump指令導出資料庫表到檔案

首先,重定向sqlite輸出到檔案。同樣不需要手動建立檔案,直接給出檔案名即可:

sqlite> .output test_table.sql
           

利用dump指令,将資料導出到檔案。如果dump不帶參數,則導出整個資料庫:

sqlite> .dump test_table
           

重定向輸出回标準指令行輸出:

sqlite> .output stdout
           

檢視test_table.sql檔案内容:

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;
           

dump指令将資料庫對象導出成SQL格式:資料庫定義語言(DDL)和資料操作語言(DML)指令,這些資訊可以幫助我們重建資料庫對象和其中的資料,可以說是完整地重制整個表。

從test_table.sql檔案内容可以看到,其中包含了DDL——create table,DML——insert values,并且在一個資料庫事務中完成。

(3)利用read指令導入資料

利用(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
           

繼續閱讀