android sqlite 参数,Android SQLite3命令详解教程
SQLite3可以讓我們手動的對SQLite數據庫進行管理。一共有2個sqlite3,一個在電腦上,它位于 android-sdk-windows\tools\sqlite3.exe,用于電腦上SQLite數據庫進行管理;還有一個位于Android系統上(手機上),它用于位于Android系統上的SQLite數據庫進行管理,對于后者你需要通過adb shell進入shell。有時我們不想直接在Android系統上對SQLite數據庫進行操作,這時可以把它拷貝到電腦上進行操作。
但是需要注意前者是Windows系統,后者是Linux系統,他們表示路徑的方式不一樣。
在SQLite3命令后可跟一個參數指定要打開或創建的數據庫文件。如果指定的數據庫文件還不存在,就會新建一個數據庫,且以該參數作為文件名。對于Android系統上的SQLite3,必須通過其shell來運行,如果新建數據庫的話,需要root權限,可以在shell中鍵入"su"來獲得root權限。
如果是Android系統的sqlite3程序(通過shell運行),你可以Ctrl鍵+D ,然后回車退出該程序回到shell,也可以Ctrl鍵+C直接退出Shell,如果是電腦上的SQLite3,可以Ctrl鍵+C直接退出SQLite3程序。
下面就是一個創建包含一個名叫"tbl1"的表的名叫"ex1"的SQLite數據庫的示例。
示例1:
java代碼:
$?sqlite3?ex1
SQLite?version?3.3.10
Enter?".help"forinstructions
sqlite>?createtabletbl1(onevarchar(10),?twosmallint);
sqlite>?insertintotbl1values('hello!',10);
sqlite>?insertintotbl1values('goodbye',?20);
sqlite>?select*fromtbl1;
hello!|10
goodbye|20
sqlite>
SQLite3支持兩種命令,一種是SQL命令,一種是非SQL命令,非SQL命令以"."作為前綴,比如".tables"命令。
可以通過".help"命令來查看它所有的非SQL命令.所有不以"."為前綴的語句,都將做SQL進行解釋,當時對于SQL語句你需要在末尾加上分號";"以表示SQL語句輸入完成,這時你輸入的命令才開始按照SQL語言進行執行。
示例2:
java代碼:
sqlite>CREATETABLEtbl2?(
...>?f1?varchar(30)primarykey,
...>?f2?text,
...>?f3?real
...>?);
sqlite>
關于數據庫的schema是存放在一個叫sqlite_master的表中,你雖然不能對它進行DROP TABLE, UPDATE, INSERT or DELETE操作,但是可以像普通的表一樣對它進行查詢。
示例3:
java代碼:
sqlite3?/data/data/com.android.providers.settings/databases/settings.db
SQLite?version?3.6.22
Enter?".help"forinstructions
Enter?SQL?statements?terminated?witha";"
sqlite>?.tables
.tables
android_metadata?bookmarks?system
bluetooth_devices?secure
sqlite>?select*fromsqlite_master;
select*fromsqlite_master;
table|android_metadata|android_metadata|3|CREATETABLEandroid_metadata?(locale?TEXT)
table|system|system|4|CREATETABLEsystem?(_idINTEGERPRIMARYKEYAUTOINCREMENT,nameTEXTUNIQUEONCONFLICTREPLACE,value?TEXT)
index|sqlite_autoindex_system_1|system|5|
table|sqlite_sequence|sqlite_sequence|6|CREATETABLEsqlite_sequence(name,seq)
index|systemIndex1|system|7|CREATEINDEXsystemIndex1ONsystem?(name)
table|secure|secure|8|CREATETABLEsecure?(_idINTEGERPRIMARYKEYAUTOINCREMENT,nameTEXTUNIQUEONCONFLICTREPLACE,value?TEXT)
index|sqlite_autoindex_secure_1|secure|9|
index|secureIndex1|secure|10|CREATEINDEXsecureIndex1ONsecure?(name)
table|bluetooth_devices|bluetooth_devices|11|CREATETABLEbluetooth_devices?(_idINTEGERPRIMARYKEY,nameTEXT,addr?TEXT,channelINTEGER,typeINTEGER)
table|bookmarks|bookmarks|12|CREATETABLEbookmarks?(_idINTEGERPRIMARYKEY,tit
le?TEXT,folder?TEXT,intent?TEXT,shortcut?INTEGER,orderingINTEGER)
index|bookmarksIndex1|bookmarks|13|CREATEINDEXbookmarksIndex1ONbookmarks?(folder)
index|bookmarksIndex2|bookmarks|14|CREATEINDEXbookmarksIndex2ONbookmarks?(shortcut)
sqlite>
在sqlite3中我們可以通過".help"命令來查所有的非SQL命令。
sqlite3 8種不同的方式顯示查詢返回的結果:"csv", "column", "html", "insert", "line", "list","tabs", "tcl".
你可以通過.mode來設置顯示的方式。默認的是"list"方式,這時返回結果的一條記錄顯示一行,每列的內容之間用設定的分隔符隔開,
默認的分隔符是"|".
示例5:
java代碼:
sqlite>?.mode?list
sqlite>?select*fromtbl1;
hello|10
goodbye|20
sqlite>
你可以通過".separator"來設置"list"模式下的分隔符。比如我們想把", "作為分隔符,可以這樣:
示例6:
java代碼:
sqlite>?.separator",?"
sqlite>?select*fromtbl1;
hello,?10
goodbye,?20
sqlite>
"line"模式下, 每行只顯示數據庫的一行的一列。每行由列名,等號和列的值組成。每條記錄之間由一個空行隔開。
示例7
java代碼:
sqlite>?.mode?line
sqlite>?select*fromtbl1;
one?=?hello
two?=?10
one?=?goodbye
two?=?20
sqlite>
"column"模式下,每條記錄都在單獨一行顯示。***行顯示的是列名,第二行只是用于分割列名和記錄的數據,第三行開始才是記錄的內容。
示例8:
java代碼:
sqlite>?.mode?columnsqlite>select*fromtbl1;
one?two
----------?----------
hello?10
goodbye?20
sqlite>
默認情況下,每列的寬度最多只能顯示10個字符。所以如果數據包含的字符如果他太多,可能就顯示不完。
但是我們可以通過".width"設置每列的寬度。
示例9:
java代碼:
sqlite>?.width?12?6
sqlite>?select*fromtbl1;
one?two
------------?------
hello?10
goodbye?20
sqlite>
示例9就把第1列和第二列的寬度分別設置為了12和6個字符,其他列的寬度并沒改變。
如果你把列寬設置為0,那么調整為以下三個的***值:10,該列的列名字符數,***行記錄該列的字符數。這樣列的寬度就可以自動調整。
默認的列寬就是0,以便它可以自動調整。
可以通過".header"命令可以設置是否顯示頭(頭包括***行,列名,第二行,分隔行)。
示例10:
java代碼:
sqlite>?.headeroff
sqlite>?select*fromtbl1;
hello?10
goodbye?20
sqlite>
"insert"模式下,返回的查詢結果將以SQL的INSERT語句形式進行顯示。
示例11:
java代碼:
sqlite>?.modeinsertnew_table
sqlite>?select*fromtbl1;
INSERTINTO'new_table'VALUES('hello',10);
INSERTINTO'new_table'VALUES('goodbye',20);
sqlite>
"html"模式下,查詢返回結果將以XHTML table的形式進行顯示,它并不以
作為結尾。 但是每條記錄以作為開始,作為結束,記錄的數據以作為開始,以作為結束示例12:
java代碼:
sqlite>select*fromsystem;
select*fromsystem;
1volume_music74volume_voice4sqlite>
".output"命令可以把查詢返回結果的輸出定向到文件上。該命令的***個參數即是要定向的位置。在把輸出定向了文件后,可以通過".output stdout"把輸出重新定向到標準輸出上。
示例13:
java代碼:
sqlite>?.mode?list
sqlite>?.separator?|
sqlite>?.outputtest_file_1.txt
sqlite>?select*fromtbl1;
sqlite>?.exit
$?cat?test_file_1.txt
hello|10
goodbye|20
$
sqlite3提供了多個命令來查看數據庫的schema".tables"命令可以查看當前數據庫所有的表
示例14:
java代碼:
sqlite>?.tables
tbl1
tbl2
sqlite>
".tables"和在list模式下執行下面的語句相似:
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
實際上, 如果你查看sqlite3程序的源碼 (found in the source tree in the file src/shell.c), you'll find exactly the above query.
另外,".tables"命令后也可以跟一參數,它是一個pattern,這樣命令就只列出表名和該參數匹配的表。
示例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(索引)。***個參數為表的名字。
示例15:
java代碼:
sqlite>?.schemasystem
.schemasystem
CREATETABLEsystem?(_idINTEGERPRIMARYKEYAUTOINCREMENT,nameTEXTUNIQUEONC
ONFLICT?REPLACE,value?TEXT);
CREATEINDEXsystemIndex1ONsystem?(name);
sqlite>?.tables
.tables
android_metadata?bookmarks?system
bluetooth_devices?secure
sqlite>?.indices?system
.indices?system
sqlite_autoindex_system_1
systemIndex1
sqlite>
".schema"命令,在沒有參數的情況,它會顯示最初用于創建數據庫的CREATE TABLE和CREATE INDEX的SQL語句。比如,示例16
".schema"命令可以包含一個參數,它是一個pattern,用于對表進行過濾,這時只會顯示滿足條件的表和所有索引的SQL語句。
比如,示例15和示例17.
示例16:
java代碼:
sqlite>?.schema
.schema
CREATETABLEandroid_metadata?(locale?TEXT);
CREATETABLEbluetooth_devices?(_idINTEGERPRIMARYKEY,nameTEXT,addr?TEXT,chan
nel?INTEGER,typeINTEGER);
CREATETABLEbookmarks?(_idINTEGERPRIMARYKEY,title?TEXT,folder?TEXT,intent?TE
XT,shortcut?INTEGER,orderingINTEGER);
CREATETABLEsecure?(_idINTEGERPRIMARYKEYAUTOINCREMENT,nameTEXTUNIQUEONC
ONFLICT?REPLACE,value?TEXT);
CREATETABLEsystem?(_idINTEGERPRIMARYKEYAUTOINCREMENT,nameTEXTUNIQUEONC
ONFLICT?REPLACE,value?TEXT);
CREATEINDEXbookmarksIndex1ONbookmarks?(folder);
CREATEINDEXbookmarksIndex2ONbookmarks?(shortcut);
CREATEINDEXsecureIndex1ONsecure?(name);
CREATEINDEXsystemIndex1ONsystem?(name);
sqlite>
示例17:
java代碼:
sqlite>?.schemas%
.schemas%
CREATETABLEsecure?(_idINTEGERPRIMARYKEYAUTOINCREMENT,nameTEXTUNIQUEONC
ONFLICT?REPLACE,value?TEXT);
CREATETABLEsqlite_sequence(name,seq);
CREATETABLEsystem?(_idINTEGERPRIMARYKEYAUTOINCREMENT,nameTEXTUNIQUEONC
ONFLICT?REPLACE,value?TEXT);
CREATEINDEXsecureIndex1ONsecure?(name);
CREATEINDEXsystemIndex1ONsystem?(name);
sqlite>
【責任編輯:立方 TEL:(010)68476606】
點贊 0
總結
以上是生活随笔為你收集整理的android sqlite 参数,Android SQLite3命令详解教程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 输入过滤,Android
- 下一篇: android启动程序唤起其它app,安