溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Android 中如何使用SQLite3命令

發(fā)布時間:2021-06-26 15:38:59 來源:億速云 閱讀:230 作者:Leah 欄目:移動開發(fā)

Android 中如何使用SQLite3命令,相信很多沒有經(jīng)驗(yàn)的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

SQLite3可以讓我們手動的對SQLite數(shù)據(jù)庫進(jìn)行管理。一共有2個sqlite3,一個在電腦上,它位于 android-sdk-windows\tools\sqlite3.exe,用于電腦上SQLite數(shù)據(jù)庫進(jìn)行管理;還有一個位于Android系統(tǒng)上(手機(jī)上),它用于位于Android系統(tǒng)上的SQLite數(shù)據(jù)庫進(jìn)行管理,對于后者你需要通過adb shell進(jìn)入shell。有時我們不想直接在Android系統(tǒng)上對SQLite數(shù)據(jù)庫進(jìn)行操作,這時可以把它拷貝到電腦上進(jìn)行操作。

但是需要注意前者是Windows系統(tǒng),后者是Linux系統(tǒng),他們表示路徑的方式不一樣。

在SQLite3命令后可跟一個參數(shù)指定要打開或創(chuàng)建的數(shù)據(jù)庫文件。如果指定的數(shù)據(jù)庫文件還不存在,就會新建一個數(shù)據(jù)庫,且以該參數(shù)作為文件名。對于Android系統(tǒng)上的SQLite3,必須通過其shell來運(yùn)行,如果新建數(shù)據(jù)庫的話,需要root權(quán)限,可以在shell中鍵入"su"來獲得root權(quán)限。

如果是Android系統(tǒng)的sqlite3程序(通過shell運(yùn)行),你可以Ctrl鍵+D ,然后回車退出該程序回到shell,也可以Ctrl鍵+C直接退出Shell,如果是電腦上的SQLite3,可以Ctrl鍵+C直接退出SQLite3程序。

下面就是一個創(chuàng)建包含一個名叫"tbl1"的表的名叫"ex1"的SQLite數(shù)據(jù)庫的示例。

示例1:

java代碼:

$ sqlite3 ex1 SQLite version 3.3.10 Enter ".help" for instructions sqlite> create table tbl1(one varchar(10), two smallint); sqlite> insert into tbl1 values('hello!',10); sqlite> insert into tbl1 values('goodbye', 20); sqlite> select * from tbl1; hello!|10 goodbye|20 sqlite>

SQLite3支持兩種命令,一種是SQL命令,一種是非SQL命令,非SQL命令以"."作為前綴,比如".tables"命令。

可以通過".help"命令來查看它所有的非SQL命令.所有不以"."為前綴的語句,都將做SQL進(jìn)行解釋,當(dāng)時對于SQL語句你需要在末尾加上分號";"以表示SQL語句輸入完成,這時你輸入的命令才開始按照SQL語言進(jìn)行執(zhí)行。

示例2:

java代碼:

sqlite> CREATE TABLE tbl2 ( ...> f1 varchar(30) primary key, ...> f2 text, ...> f3 real ...> ); sqlite>

關(guān)于數(shù)據(jù)庫的schema是存放在一個叫sqlite_master的表中,你雖然不能對它進(jìn)行DROP TABLE, UPDATE, INSERT or DELETE操作,但是可以像普通的表一樣對它進(jìn)行查詢。

示例3:

java代碼:

sqlite3 /data/data/com.android.providers.settings/databases/settings.db SQLite version 3.6.22 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> .tables .tables android_metadata bookmarks system bluetooth_devices secure sqlite> select * from sqlite_master; select * from sqlite_master; table|android_metadata|android_metadata|3|CREATE TABLE android_metadata (locale TEXT) table|system|system|4|CREATE TABLE system (_id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT UNIQUE ON CONFLICT REPLACE,value TEXT) index|sqlite_autoindex_system_1|system|5| table|sqlite_sequence|sqlite_sequence|6|CREATE TABLE sqlite_sequence(name,seq) index|systemIndex1|system|7|CREATE INDEX systemIndex1 ON system (name) table|secure|secure|8|CREATE TABLE secure (_id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT UNIQUE ON CONFLICT REPLACE,value TEXT) index|sqlite_autoindex_secure_1|secure|9| index|secureIndex1|secure|10|CREATE INDEX secureIndex1 ON secure (name) table|bluetooth_devices|bluetooth_devices|11|CREATE TABLE bluetooth_devices (_id INTEGER PRIMARY KEY,name TEXT,addr TEXT,channel INTEGER,type INTEGER) table|bookmarks|bookmarks|12|CREATE TABLE bookmarks (_id INTEGER PRIMARY KEY,tit le TEXT,folder TEXT,intent TEXT,shortcut INTEGER,ordering INTEGER) index|bookmarksIndex1|bookmarks|13|CREATE INDEX bookmarksIndex1 ON bookmarks (folder) index|bookmarksIndex2|bookmarks|14|CREATE INDEX bookmarksIndex2 ON bookmarks (shortcut) sqlite>

在sqlite3中我們可以通過".help"命令來查所有的非SQL命令。

sqlite3 8種不同的方式顯示查詢返回的結(jié)果:"csv", "column", "html", "insert", "line",  "list","tabs", "tcl".

你可以通過.mode來設(shè)置顯示的方式。默認(rèn)的是"list"方式,這時返回結(jié)果的一條記錄顯示一行,每列的內(nèi)容之間用設(shè)定的分隔符隔開,

默認(rèn)的分隔符是"|".

示例5:

java代碼:

sqlite> .mode list sqlite> select * from tbl1; hello|10 goodbye|20 sqlite>

你可以通過".separator"來設(shè)置"list"模式下的分隔符。比如我們想把", "作為分隔符,可以這樣:

示例6:

java代碼:

sqlite> .separator ", " sqlite> select * from tbl1; hello, 10 goodbye, 20 sqlite>

"line"模式下, 每行只顯示數(shù)據(jù)庫的一行的一列。每行由列名,等號和列的值組成。每條記錄之間由一個空行隔開。

示例7

java代碼:

sqlite> .mode line sqlite> select * from tbl1; one = hello two = 10 one = goodbye two = 20 sqlite>

"column"模式下,每條記錄都在單獨(dú)一行顯示。***行顯示的是列名,第二行只是用于分割列名和記錄的數(shù)據(jù),第三行開始才是記錄的內(nèi)容。

示例8:

java代碼:

sqlite> .mode columnsqlite> select * from tbl1; one two ---------- ---------- hello 10 goodbye 20 sqlite>

默認(rèn)情況下,每列的寬度最多只能顯示10個字符。所以如果數(shù)據(jù)包含的字符如果他太多,可能就顯示不完。

但是我們可以通過".width"設(shè)置每列的寬度。

示例9:

java代碼:

sqlite> .width 12 6 sqlite> select * from tbl1; one two ------------ ------ hello 10 goodbye 20 sqlite>

示例9就把第1列和第二列的寬度分別設(shè)置為了12和6個字符,其他列的寬度并沒改變。

如果你把列寬設(shè)置為0,那么調(diào)整為以下三個的***值:10,該列的列名字符數(shù),***行記錄該列的字符數(shù)。這樣列的寬度就可以自動調(diào)整。

默認(rèn)的列寬就是0,以便它可以自動調(diào)整。

可以通過".header"命令可以設(shè)置是否顯示頭(頭包括***行,列名,第二行,分隔行)。

示例10:

java代碼:

sqlite> .header off sqlite> select * from tbl1; hello 10 goodbye 20 sqlite>

"insert"模式下,返回的查詢結(jié)果將以SQL的INSERT語句形式進(jìn)行顯示。

示例11:

java代碼:

sqlite> .mode insert new_table sqlite> select * from tbl1; INSERT INTO 'new_table' VALUES('hello',10); INSERT INTO 'new_table' VALUES('goodbye',20); sqlite>

"html"模式下,查詢返回結(jié)果將以XHTML  table的形式進(jìn)行顯示,它并不以<TABLE>作為開頭和</TABLE>作為結(jié)尾。  但是每條記錄以<TR>作為開始,</TR>作為結(jié)束,記錄的數(shù)據(jù)以<TD>作為開始,以</TD>作為結(jié)束

示例12:

java代碼:

sqlite> select * from system; select * from system; <TR><TD>1</TD> <TD>volume_music</TD> <TD>7</TD> </TR> <TR><TD>4</TD> <TD>volume_voice</TD> <TD>4</TD> </TR> sqlite>

".output"命令可以把查詢返回結(jié)果的輸出定向到文件上。該命令的***個參數(shù)即是要定向的位置。在把輸出定向了文件后,可以通過".output  stdout"把輸出重新定向到標(biāo)準(zhǔn)輸出上。

示例13:

java代碼:

sqlite> .mode list sqlite> .separator | sqlite> .output test_file_1.txt sqlite> select * from tbl1; sqlite> .exit $ cat test_file_1.txt hello|10 goodbye|20 $

sqlite3提供了多個命令來查看數(shù)據(jù)庫的schema".tables"命令可以查看當(dāng)前數(shù)據(jù)庫所有的表

示例14:

java代碼:

sqlite> .tables tbl1 tbl2 sqlite>

".tables"和在list模式下執(zhí)行下面的語句相似:

 SELECT name FROM sqlite_master WHERE type IN ('table','view') AND  name NOT LIKE 'sqlite_%' UNION ALL SELECT name FROM sqlite_temp_master  WHERE type IN ('table','view') ORDER BY 1

實(shí)際上, 如果你查看sqlite3程序的源碼 (found in the source tree in the file src/shell.c), you'll find exactly the above query.

另外,".tables"命令后也可以跟一參數(shù),它是一個pattern,這樣命令就只列出表名和該參數(shù)匹配的表。

示例14-1:

java代碼:

sqlite> .tables .tables android_metadata bookmarks system bluetooth_devices secure sqlite> .tables s% .tables s% secure sqlite_sequence system sqlite>

".indices"命令列出指定表的所有indices(索引)。***個參數(shù)為表的名字。

示例15:

java代碼:

sqlite> .schema system .schema system CREATE TABLE system (_id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT UNIQUE ON C ONFLICT REPLACE,value TEXT); CREATE INDEX systemIndex1 ON system (name); sqlite> .tables .tables android_metadata bookmarks system bluetooth_devices secure sqlite> .indices system .indices system sqlite_autoindex_system_1 systemIndex1 sqlite>

".schema"命令,在沒有參數(shù)的情況,它會顯示最初用于創(chuàng)建數(shù)據(jù)庫的CREATE TABLE和CREATE INDEX的SQL語句。比如,示例16

".schema"命令可以包含一個參數(shù),它是一個pattern,用于對表進(jìn)行過濾,這時只會顯示滿足條件的表和所有索引的SQL語句。

比如,示例15和示例17.

示例16:

java代碼:

sqlite> .schema .schema CREATE TABLE android_metadata (locale TEXT); CREATE TABLE bluetooth_devices (_id INTEGER PRIMARY KEY,name TEXT,addr TEXT,chan nel INTEGER,type INTEGER); CREATE TABLE bookmarks (_id INTEGER PRIMARY KEY,title TEXT,folder TEXT,intent TE XT,shortcut INTEGER,ordering INTEGER); CREATE TABLE secure (_id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT UNIQUE ON C ONFLICT REPLACE,value TEXT); CREATE TABLE system (_id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT UNIQUE ON C ONFLICT REPLACE,value TEXT); CREATE INDEX bookmarksIndex1 ON bookmarks (folder); CREATE INDEX bookmarksIndex2 ON bookmarks (shortcut); CREATE INDEX secureIndex1 ON secure (name); CREATE INDEX systemIndex1 ON system (name); sqlite>

示例17:

java代碼:

sqlite> .schema s% .schema s% CREATE TABLE secure (_id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT UNIQUE ON C ONFLICT REPLACE,value TEXT); CREATE TABLE sqlite_sequence(name,seq); CREATE TABLE system (_id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT UNIQUE ON C ONFLICT REPLACE,value TEXT); CREATE INDEX secureIndex1 ON secure (name); CREATE INDEX systemIndex1 ON system (name); sqlite>

看完上述內(nèi)容,你們掌握Android 中如何使用SQLite3命令的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI