http://www.cnblogs.com/linjiqin/archive/2011/11/28/2266619.htmljava
SQLite3 爲android所使用的輕量級數據庫,小巧方便,用於管理android系統中的各類db文件。linux
SQLite庫包含一個名字叫作sqlite3的命令行,它可讓用戶手工輸入並執行面向SQLite數據庫的SQL命令。android
本文檔提供一個使用sqlite3命令的簡要說明。 sql
啓動sqlite3程序,僅僅須要敲入帶有SQLite數據庫名字的"sqlite3"命令便可。shell
若是文件不存在,則建立一個新的(數據庫)文件。而後sqlite3程序將提示你輸入SQL。數據庫
敲入SQL語句(以分號「;」結束),ubuntu
敲回車鍵以後,SQL語句就會執行。數據結構
例如,建立一張"tb11"表,你能夠這樣作:ide
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,那麼這個列寬將自動如下面三個數字中的最大值作爲列寬:
十、表頭寬度和最寬的數據列的寬度。
這可讓列自動調整寬度。每列的默認設置爲自動調整的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 退出命令行接口
.databases 顯示數據庫信息(好像.database也能夠)
.tables 顯示全部表名(好像.table也能夠)
.schema 查看全部表的數據結構;
.schema table_name 查看某表的數據結構
改變輸出格式
.mode list|column|insert|line|tabs|tcl|csv
.separator "," 更改分界符號爲,
.width 5 每列寬度爲5
更改輸出
.output file_name|stdout
數據類型
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 包含了 年、月、日、時、分、秒、千分之一秒。
數據操做
插入記錄
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; 刪除索引;
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');
http://www.blogjava.net/anchor110/articles/335882.html
1.數據庫、表的創建,記錄的添加、查詢、修改和刪除
F:">sqlite3 database.db
sqlite> create table admin(username text,age integer);
sqlite> insert into admin values('kuang',25);
sqlite> select * from admin;
sqlite> update admin set username='kk',age=24 where username='kuang' and age=25;
sqlite> delete from admin where username='kk';
注:每條sql語句後必須以";"號結尾!
2.Sqlite系統命令
.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(以SQL格式輸出表結構)
.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(把文件中的數據導入到表中,各字段用separator的值爲分隔符)
.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)(以.width設置的寬度顯示各字段)
html HTML <table> code(html表格格式輸出)
insert SQL insert statements for TABLE(以insert SQL語句形式輸出)
line One value per line(field = value的形式逐行輸出)
list Values delimited by .separator string(各字段以separator的值爲分隔符輸出)
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(執行文件中的SQL語句)
.schema ?TABLE? Show the Create statements(以SQL格式輸出表結構)
.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(設置列寬)
sqlite3 爲android所使用的輕量級數據庫,小巧方便,用於管理android系統中的各類db文件,
在ubuntu中能夠安裝sqliteman 來查看android系統中的db文件,Framework中的接口位置:
/frameworks/base/core/java/android/database/sqlite/SQLiteDatabase.java
我使用的是ubuntu的minicom下的shell終端,以系統setting的database爲例,目錄爲:
/data/data/com.android.providers.settings/databases/setting.db
cd 到databases目錄下,打開數據庫文件:
sqlite3 setting.db
SQLite version 3.7.11 2012-03-20 11:35:50 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite>
能夠看到SQL版本,以及簡單提示,使用SQL語句時須要以 「;」 分號結尾!
sqlite3 *.db 打開數據庫,若是存在就打開操做,若是不存在就建立,修改以後可以保存建立。
使用.help 查看幫助:
.backup ?DB? FILE Backup DB (default "main") to FILE .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 If TABLE specified, only dump tables matching LIKE pattern TABLE. .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. With no args, it turns EXPLAIN on. .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 If TABLE specified, only show indices for tables matching LIKE pattern TABLE. .log FILE|off Turn logging on or off. FILE can be stderr/stdout .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 .restore ?DB? FILE Restore content of DB (default "main") from FILE .schema ?TABLE? Show the CREATE statements If TABLE specified, only show tables matching LIKE pattern TABLE. .separator STRING Change separator used by output mode and .import .show Show the current values for various settings .stats ON|OFF Turn stats on or off .tables ?TABLE? List names of tables If TABLE specified, only list tables matching LIKE pattern TABLE. .timeout MS Try opening locked tables for MS milliseconds .vfsname ?AUX? Print the name of the VFS stack .width NUM1 NUM2 ... Set column widths for "column" mode .timer ON|OFF Turn the CPU timer measurement on or off sqlite> .help .backup ?DB? FILE Backup DB (default "main") to FILE .bail ON|OFF Stop after hitting an error. Default OFF .databases List names and files of attached databases sqlite> sqlite> sqlite> .help .backup ?DB? FILE Backup DB (default "main") to FILE .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 If TABLE specified, only dump tables matching LIKE pattern TABLE. .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. With no args, it turns EXPLAIN on. .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 If TABLE specified, only show indices for tables matching LIKE pattern TABLE. .log FILE|off Turn logging on or off. FILE can be stderr/stdout .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 .restore ?DB? FILE Restore content of DB (default "main") from FILE .schema ?TABLE? Show the CREATE statements If TABLE specified, only show tables matching LIKE pattern TABLE. .separator STRING Change separator used by output mode and .import .show Show the current values for various settings .stats ON|OFF Turn stats on or off .tables ?TABLE? List names of tables If TABLE specified, only list tables matching LIKE pattern TABLE. .timeout MS Try opening locked tables for MS milliseconds .vfsname ?AUX? Print the name of the VFS stack .width NUM1 NUM2 ... Set column widths for "column" mode .timer ON|OFF Turn the CPU timer measurement on or off
能夠看到所支持的命令,其中經常使用的:
.database 顯示數據庫信息;包含當前數據庫的位置
.tables 或者 .table 顯示錶名稱 沒有表則不顯示
.schema 命令能夠查看建立數據對象時的SQL命令;
.mode csv|column|insert|line|list|tabs|tcl 改變輸出格式
默認狀況,使用 select * from system 查看system表的所有數據:
sqlite> select * from system; 1|volume_music|15 2|volume_ring|5 3|volume_system|7 4|volume_voice|4 5|volume_alarm|6 6|volume_notification|5 7|volume_bluetooth_sco|7 ...
能夠看到是列表的形式顯示出來的,並且ID name value 都是以 「 | 」 分隔開來,分割符號由
.separator "X" 來定義,X即爲分割符!
使用 .mode culumn 以後:
sqlite> .mode column sqlite> select * from system; 1 volume_music 15 2 volume_ring 5 3 volume_syste 7 4 volume_voice 4 5 volume_alarm 6 6 volume_notif 5 7 volume_bluet 7
其它相似,都只是爲了 改變輸出的格式而已。
sqlite> .schema system CREATE TABLE system (_id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT UNIQUE ON CONFLICT REPLACE,value TEXT); CREATE INDEX systemIndex1 ON system (name);
建立的時候指定參數和屬性,這裏有三個,而且自增,關於數據類型:
NULL: 這個值爲空值
INTEGER: 值被標識爲整數,依據值的大小能夠依次被存儲爲1,2,3,4,5,6,7,8個字節
REAL: 全部值都是浮動的數值,被存儲爲8字節的IEEE浮動標記序號.
TEXT: 文本. 值爲文本字符串,使用數據庫編碼存儲(TUTF-8, UTF-16BE or UTF-16-LE).
BLOB: 值是BLOB數據,如何輸入就如何存儲,不改變格式.
sqlite> .mode insert sqlite> select * from system; INSERT INTO table VALUES(1,'volume_music','15'); INSERT INTO table VALUES(2,'volume_ring','5'); INSERT INTO table VALUES(3,'volume_system','7'); INSERT INTO table VALUES(4,'volume_voice','4'); INSERT INTO table VALUES(5,'volume_alarm','6'); INSERT INTO table VALUES(6,'volume_notification','5'); INSERT INTO table VALUES(7,'volume_bluetooth_sco','7');
如我要在system表裏面插入一條數據:
insert into system values('45','sqlite','jscese');
這裏插入數據要跟建立的時候數量要對應,否則會報:
Error: table table_name has * columns but * values were supplied
sqlite> select * from system where name='sqlite'; INSERT INTO table VALUES(45,'sqlite','jscese');
根據表類型值來篩選查詢,這裏表的屬性有 _id ,name,value ,可在建立命令中看到!
delete from system where value='jscese';
刪除整個表:drop table table_name
45|sqlite|jscese sqlite> update system set name='sqlite3' where value='jscese'; sqlite> select * from system where value='jscese'; 45|sqlite3|jscese
在使用SQL指令以後沒有加 分號就 enter,會進入輸入模式,這個時候再補上 一個 ; 分號便可:
sqlite> select * from system ...> ;
我直接在minicom下使用 sqlite 沒法識別 上下左右方向鍵,以及 回退鍵!
出現 ^[[A ^H 這樣的亂碼,
網上別人給出的,我沒試過~http://ljhzzyx.blog.163.com/blog/static/3838031220102595026789/
本機終端adb shell 是能夠識別 回退鍵的
通常退出sqlite3 使用 .quit
實在退不出 ...> 模式 就使用 ctrl+D 強退!
出處:http://blog.csdn.net/jscese/article/details/40016701