android sqlite3詳解
SQLite庫包含一個名字叫做sqlite3的命令行,它可以讓用戶手工輸入并執行面向SQLite數據庫的SQL命令。本文檔提供一個使用sqlite3命令的簡要說明。
啟動sqlite3程序,僅僅需要敲入帶有SQLite數據庫名字的"sqlite3"命令即可。如果文件不存在,則創建一個新的(數據庫)文件。然后sqlite3程序將提示你輸入SQL。敲入SQL語句(以分號“;”結束),敲回車鍵之后,SQL語句就會執行。
例如,創建一張"tb11"表,你可以這樣做: C:\Users\Administrator>adb shell # sqlite3 SQLite version 3.5.9 Enter ".help" for instructions sqlite> create table tb_stu(id smallint,name varchar(10)); sqlite> insert into tb_stu values(1,'zhangsan'); sqlite> insert into tb_stu values (2,'lisi'); sqlite> .mode column sqlite> .width 10 sqlite> select * from tb_stu; 1 zhangsan 2 lisi sqlite> 復制代碼
你可以通過敲你所用系統的文件結束符(通常是Ctrl + D)或者中斷字符(通常是Ctrl + C),來終止sqlite3程序。確定你在每個SQL語句結束敲入分號!sqlite3程序通過查找分號來決定一個SQL語句的結束。如果你省略分號,sqlite3將給你一個連續的命令提示符并等你給當前的SQL命令添加更多的文字。這個特點讓你輸入多行的多個SQL語句,例如: sqlite> create table tb_stu( create table tb_stu( ...> id smallint, ...> name varchar(10) ...> ); ); 復制代碼
題外話:查詢SQLITE_MASTER表 SQLite數據庫的表數據結構被保存在一個名叫"sqlite_master"的特殊的表中。你可以像查詢其它表一樣通過執行“SELECT”查詢這個特殊的表。 sqlite> select * from sqlite_master; table tb_stu tb_stu 2 CREATE TABLE tb_stu(id smallint,name varchar(10)) sqlite> 復制代碼
但你不能在sqlite_master表中執行諸如DROP TABLE, UPDATE, INSERT 或者DELETE命令。sqlite_master表在你創建、刪除和索引數據庫時自動更新這個表。你不能手工更改sqlite_master表。
TEMPORARY表的結構沒有存儲在"sqlite_master"表中,由于TEMPORARY表對應用是不可見的,而不是應用程序創建這個表。 TEMPORARY表結構被存儲在另外一個名叫"sqlite_temp_master"的特定的表中。"sqlite_temp_master"表是臨時表自身。
sqlite3的特殊命令
大多數時候,sqlite3讀入輸入行,并把它們傳遞到SQLite庫中去運行。但是如果輸入行以一個點(“.”)開始,那么這行將被sqlite3程序自己截取并解釋。這些“點命令”通常被用來改變查詢輸出的格式,或者執行鞭個預封包(預定義prepackaged)的查詢語句。
你可以在任何時候輸入“.help”,列出可用的點命令。例如 sqlite> .help .bail ON|OFF Stop after hitting an error. Default OFF .databases List names and files of attached databases .dump ?TABLE? ... Dump the database in an SQL text format .echo ON|OFF Turn command echo on or off .exit Exit this program .explain ON|OFF Turn output mode suitable for EXPLAIN on or off. .header(s) ON|OFF Turn display of headers on or off .help Show this message .import FILE TABLE Import data from FILE into TABLE .indices TABLE Show names of all indices on TABLE .load FILE ?ENTRY? Load an extension library .mode MODE ?TABLE? Set output mode where MODE is one of: csv Comma-separated values column Left-aligned columns. (See .width) html HTML <table> code insert SQL insert statements for TABLE line One value per line list Values delimited by .separator string tabs Tab-separated values tcl TCL list elements .nullvalue STRING Print STRING in place of NULL values .output FILENAME Send output to FILENAME .output stdout Send output to the screen .prompt MAIN CONTINUE Replace the standard prompts .quit Exit this program .read FILENAME Execute SQL in FILENAME .schema ?TABLE? Show the CREATE statements .separator STRING Change separator used by output mode and .import .show Show the current values for various settings .tables ?PATTERN? List names of tables matching a LIKE pattern .timeout MS Try opening locked tables for MS milliseconds .width NUM NUM ... Set column widths for "column" mode sqlite> 復制代碼
改變輸出格式 sqlite3程序可以以八種不同的格式顯示一個查詢的結果:"csv", "列", "html", "插入", "行", "制表"和"tcl"。你可以用".mode"點命令在這些輸出格式之間切換。
默認的輸出格式是“列表”。在列表模式下,每條查詢結果記錄被寫在一行中并且每列之間以一個字符串分割符隔開。默認的分隔符是一個管道符號(“|”)。列表符號在當你輸出查詢結果到另外一個符加處理的程序(如AWK)中去是尤為有用。 sqlite> .mode list sqlite> select * from tb_stu; 1|zhangsan 2|lisi sqlite> 復制代碼
你可以用“.separator”點命令來改變分界符。例如,為了把分割符改為一個逗號和一個空格,你可以這樣做: sqlite> .separator '' sqlite> select * from tb_stu; 1 zhangsan 2 lisi sqlite>
或者 sqlite> .separator ',' sqlite> select * from tb_stu; 1,zhangsan 2,lisi sqlite> 復制代碼
在“line"模式下,每一個位于條記錄中的列在它自己那行顯示。每行由列名、一個等號和列數據組成。下一條記錄以一個空行隔開。這是一個行模式輸出的例子: sqlite> .mode line sqlite> select * from tb_stu; id = 1 name = zhangsan
id = 2 name = lisi sqlite> 復制代碼
在列模式下,每條記錄在一個單獨的行中以數據列對齊的方式顯示。列如: sqlite> .mode column sqlite> select * from tb_stu; 1 zhangsan 2 lisi sqlite> 復制代碼
在默認的情況下,每列至少10個字符寬。太寬的數據將被截取。你可以用“.width”命令來調整列寬。如下所示: --每一列列寬都為10 sqlite> .width 10 sqlite> select * from tb_stu; 1 zhangsan 2 lisi sqlite> --設置第一列寬為12第二列寬為6。其它的列寬不變 sqlite> .width 12 6 sqlite> select * from tb_stu; 1 zhangsan 2 lisi sqlite> 復制代碼
上面例子中".width"命令設置第一列寬為12第二列寬為6。其它的列寬不變。你可以指定與你查詢結果需要的列數一樣多的“.width”參數。
如果你指定一列寬為0,那么這個列寬將自動以下面三個數字中的最大值做為列寬:10、表頭寬度和最寬的數據列的寬度。這可以讓列自動調整寬度。每列的默認設置為自動調整的0值。
出現在輸出開頭兩行的列標示可以用".header"點命令關閉。在上面的例子中,列標示是打開的。可以用下面的方法關閉列標示: sqlite> .header off sqlite> select * from tb_stu; 1 zhang 2 lisi sqlite> 復制代碼
另外一個有用的輸出模式是"insert"。在插入模式下,被子格式化為看起來像SQL INSERT語句的樣式。你可以用插入模式來產生文件(便于)以后用于不同數據庫的輸入。
當指定插入模式時,你必須給定一個特定參數就是要插入的表名。例如: sqlite> .mode insert tb_stu_temp sqlite> select * from tb_stu; INSERT INTO tb_stu_temp VALUES(1,'zhangsan'); INSERT INTO tb_stu_temp VALUES(2,'lisi'); sqlite> 復制代碼
最新的輸出格式是“html”。在這種模式下,sqlite3把查詢的結果寫做XHTML表。開始的<TABLE>和結束的</TABLE>(標記)沒有寫出,但有<TR>、<TH>和<TD>等分界符。html輸出對CGI來說是相當有用地。
把結果寫到文件中 默認情況下,sqlte3把結果送到標準輸出。你可以用“.output”命令改變它。只須把輸出文件名做為.output命令的輸出參數然后所有后續查詢結果將被寫到那個文件中。用“.output stdout”再一次改為標準輸出。例如: sqlite> .separator | sqlite> .output tb_stu_temp.txt sqlite> select * from tb_stu; sqlite> .exit # cat tb_stu_temp.txt hello|10 goodbye|20 復制代碼
查詢數據庫結構 sqlite3程序提供幾個有用的用于查詢數據庫結構的快捷命令。這些不是不可以用別的方式來實現。這些命令僅僅是一個快捷方式而已。 例如,為了查看數據庫的所有表,你可以敲入“.tables”。
“.tables”命令相似于設置列表模式然后執行接下來的查詢: .databases 列出數據庫文件名 .tables ?PATTERN? 列出?PATTERN?匹配的表名 .import FILE TABLE 將文件中的數據導入的文件中 .dump ?TABLE? 生成形成數據庫表的SQL腳本 .output FILENAME 將輸出導入到指定的文件中 .output stdout 將輸出打印到屏幕 .mode MODE ?TABLE? 設置數據輸出模式(csv,html,tcl… .nullvalue STRING 用指定的串代替輸出的NULL串 .read FILENAME 執行指定文件中的SQL語句 .schema ?TABLE? 打印創建數據庫表的SQL語句 .separator STRING 用指定的字符串代替字段分隔符 .show 打印所有SQLite環境變量的設置 .quit 退出命令行接口
數據類型
sqlite3對字段沒有嚴格要求,字段可以存儲任何類型數據,它會適時的自動轉換,當然,你也可以創建表的時候對數據類型進行定義。
sqlite3包含null、integer、real、text、blob等數據類型,但實際上sqlite3也接收如下數據類型: smallint 16位的整數。 interger 32位的整數。 decimal(p,s) 指定精度或對象能夠控制的數字個數。 p:小數點左邊和右邊數字之和,不包括小數點。如 123.45,則 p=5,s=2。 s:小數點右邊的位數或個數。 float 32位的浮點數。 double 64位的浮點數。 char(n) n長度的字符串,n不能超過254。 varchar(n) 長度不固定且其最大長度為n的字符串,n不能超過4000。 graphic(n) 和char(n)一樣,不過其單位是兩個字元double-bytes,n不能超過127。這個形態是為了支援兩個字節長度的字體,例如中文字。 vargraphic(n) 可變長度且其最大長度為n的雙字元字串,n不能超過2000 date 包含了 年份、月份、日期。 time 包含了 小時、分鐘、秒。 timestamp 包含了 年、月、日、時、分、秒、千分之一秒。 查看 .databases 顯示數據庫信息(好像.database也可以) .tables 顯示所有表名(好像.table也可以) .schema 查看所有表的數據結構; .schema table_name 查看某表的數據結構 插入記錄 insert into table_name values (field1, field2, field3...); 查詢 select * from table_name;查看table_name表中所有記錄; select * from table_name where field1='xxxxx'; 查詢符合指定條件的記錄; 刪除 drop table_name; 刪除表; drop index_name; 刪除索引; 改變輸出格式 .mode list|column|insert|line|tabs|tcl|csv .separator "," 更改分界符號為, .width 5 每列寬度為5 更改輸出 .output file_name|stdout
接下來演示如何在android項目中操作數據庫? 1)、首先在myeclipse中新建一個android項目命名為testprj,并運行項目,目錄結構如下:
2)、操作數據庫,因為sqlite數據庫存放在/data/data/package/目錄下,我們可以通過cd命令進入/data/data/package/目錄下進行數據庫的操作: adb shell #進入linux命令環境 cd /data/data/com.ljq.activity/ #進入/data/data/com.ljq.activity/目錄下 sqlite3 test.db #進入sqlite的操作環境,如果文件存在,則直接打開 create table tb_stu(id smallint,name varchar(20),pwd varchar(6)) #新建一張tb_stu表 insert into tb_stu values (1, 'zhangsan', '123456'); insert into tb_stu values (2, 'lisi', '123456');
|