Android SQLite3命令详解教程

sqlite3可以让我们手动的对SQLite数据库进行管理。一共有2个sqlite3,一个在电脑上,它位于 Android-sdk-windows\tools\sqlite3.exe,用于电脑上SQLite数据库进行管理;还有一个位于Android系统上(手机上),它用于位于Android系统上的SQLite数据库进行管理,对于后者你需要通过adb shell进入shell。有时我们不想直接在Android系统上对SQLite数据库进行操作,这时可以把它拷贝到电脑上进行操作。

创新互联致力于网站建设,网站制作设计,营销网页按需求定制设计,成都外贸网站制作,企业网站建设,微信平台小程序开发,网站SEO优化,网站设计制作案例丰富,是成都做网站公司和建站公司,欢迎咨询。

但是需要注意前者是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代码:

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

SQLite3支持两种命令,一种是SQL命令,一种是非SQL命令,非SQL命令以"."作为前缀,比如".tables"命令。

可以通过".help"命令来查看它所有的非SQL命令.所有不以"."为前缀的语句,都将做SQL进行解释,当时对于SQL语句你需要在末尾加上分号";"以表示SQL语句输入完成,这时你输入的命令才开始按照SQL语言进行执行。

示例2:

java代码:

 
 
  1. sqlite> CREATE TABLE tbl2 ( 
  2. ...> f1 varchar(30) primary key, 
  3. ...> f2 text, 
  4. ...> f3 real 
  5. ...> ); 
  6. sqlite> 

关于数据库的schema是存放在一个叫sqlite_master的表中,你虽然不能对它进行DROP TABLE, UPDATE, INSERT or DELETE操作,但是可以像普通的表一样对它进行查询。

示例3:

java代码:

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

#p#

在sqlite3中我们可以通过".help"命令来查所有的非SQL命令。

sqlite3 8种不同的方式显示查询返回的结果:"csv", "column", "html", "insert", "line", "list","tabs", "tcl".

你可以通过.mode来设置显示的方式。默认的是"list"方式,这时返回结果的一条记录显示一行,每列的内容之间用设定的分隔符隔开,

默认的分隔符是"|".

示例5:

java代码:

 
 
  1. sqlite> .mode list 
  2. sqlite> select * from tbl1; 
  3. hello|10 
  4. goodbye|20 
  5. sqlite> 

你可以通过".separator"来设置"list"模式下的分隔符。比如我们想把", "作为分隔符,可以这样:

示例6:

java代码:

 
 
  1. sqlite> .separator ", " 
  2. sqlite> select * from tbl1; 
  3. hello, 10 
  4. goodbye, 20 
  5. sqlite> 

"line"模式下, 每行只显示数据库的一行的一列。每行由列名,等号和列的值组成。每条记录之间由一个空行隔开。

示例7

java代码:

 
 
  1. sqlite> .mode line 
  2. sqlite> select * from tbl1; 
  3. one = hello 
  4. two = 10 
  5. one = goodbye 
  6. two = 20 
  7. sqlite> 

"column"模式下,每条记录都在单独一行显示。***行显示的是列名,第二行只是用于分割列名和记录的数据,第三行开始才是记录的内容。

示例8:

java代码:

 
 
  1. sqlite> .mode columnsqlite> select * from tbl1; 
  2. one two 
  3. ---------- ---------- 
  4. hello 10 
  5. goodbye 20 
  6. sqlite> 

默认情况下,每列的宽度最多只能显示10个字符。所以如果数据包含的字符如果他太多,可能就显示不完。

但是我们可以通过".width"设置每列的宽度。

示例9:

java代码:

 
 
  1. sqlite> .width 12 6 
  2. sqlite> select * from tbl1; 
  3. one two 
  4. ------------ ------ 
  5. hello 10 
  6. goodbye 20 
  7. sqlite> 

示例9就把第1列和第二列的宽度分别设置为了12和6个字符,其他列的宽度并没改变。

如果你把列宽设置为0,那么调整为以下三个的***值:10,该列的列名字符数,***行记录该列的字符数。这样列的宽度就可以自动调整。

默认的列宽就是0,以便它可以自动调整。

可以通过".header"命令可以设置是否显示头(头包括***行,列名,第二行,分隔行)。

示例10:

java代码:

 
 
  1. sqlite> .header off 
  2. sqlite> select * from tbl1; 
  3. hello 10 
  4. goodbye 20 
  5. sqlite> 

"insert"模式下,返回的查询结果将以SQL的INSERT语句形式进行显示。

示例11:

java代码:

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

"html"模式下,查询返回结果将以XHTML table的形式进行显示,它并不以

作为开头和
作为结尾。 但是每条记录以作为开始,作为结束,记录的数据以作为开始,以作为结束

示例12:

java代码:

 
 
  1. sqlite> select * from system; 
  2. select * from system; 
  3. volume_music 
  4.  
  5. volume_voice 
  6.  
  7. sqlite> 

".output"命令可以把查询返回结果的输出定向到文件上。该命令的***个参数即是要定向的位置。在把输出定向了文件后,可以通过".output stdout"把输出重新定向到标准输出上。

示例13:

java代码:

 
 
  1. sqlite> .mode list 
  2. sqlite> .separator | 
  3. sqlite> .output test_file_1.txt 
  4. sqlite> select * from tbl1; 
  5. sqlite> .exit 
  6. $ cat test_file_1.txt 
  7. hello|10 
  8. goodbye|20 

#p#

sqlite3提供了多个命令来查看数据库的schema".tables"命令可以查看当前数据库所有的表

示例14:

java代码:

 
 
  1. sqlite> .tables 
  2. tbl1 
  3. tbl2 
  4. 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代码:

 
 
  1. sqlite> .tables 
  2. .tables 
  3. android_metadata bookmarks system 
  4. bluetooth_devices secure 
  5. sqlite> .tables s% 
  6. .tables s% 
  7. secure sqlite_sequence system 
  8. sqlite> 

".indices"命令列出指定表的所有indices(索引)。***个参数为表的名字。

示例15:

java代码:

 
 
  1. sqlite> .schema system 
  2. .schema system 
  3. CREATE TABLE system (_id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT UNIQUE ON C 
  4. ONFLICT REPLACE,value TEXT); 
  5. CREATE INDEX systemIndex1 ON system (name); 
  6. sqlite> .tables 
  7. .tables 
  8. android_metadata bookmarks system 
  9. bluetooth_devices secure 
  10. sqlite> .indices system 
  11. .indices system 
  12. sqlite_autoindex_system_1 
  13. systemIndex1 
  14. sqlite> 

".schema"命令,在没有参数的情况,它会显示最初用于创建数据库的CREATE TABLE和CREATE INDEX的SQL语句。比如,示例16

".schema"命令可以包含一个参数,它是一个pattern,用于对表进行过滤,这时只会显示满足条件的表和所有索引的SQL语句。

比如,示例15和示例17.

示例16:

java代码:

 
 
  1. sqlite> .schema 
  2. .schema 
  3. CREATE TABLE android_metadata (locale TEXT); 
  4. CREATE TABLE bluetooth_devices (_id INTEGER PRIMARY KEY,name TEXT,addr TEXT,chan 
  5. nel INTEGER,type INTEGER); 
  6. CREATE TABLE bookmarks (_id INTEGER PRIMARY KEY,title TEXT,folder TEXT,intent TE 
  7. XT,shortcut INTEGER,ordering INTEGER); 
  8. CREATE TABLE secure (_id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT UNIQUE ON C 
  9. ONFLICT REPLACE,value TEXT); 
  10. CREATE TABLE system (_id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT UNIQUE ON C 
  11. ONFLICT REPLACE,value TEXT); 
  12. CREATE INDEX bookmarksIndex1 ON bookmarks (folder); 
  13. CREATE INDEX bookmarksIndex2 ON bookmarks (shortcut); 
  14. CREATE INDEX secureIndex1 ON secure (name); 
  15. CREATE INDEX systemIndex1 ON system (name); 
  16. sqlite> 

示例17:

java代码:

 
 
  1. sqlite> .schema s% 
  2. .schema s% 
  3. CREATE TABLE secure (_id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT UNIQUE ON C 
  4. ONFLICT REPLACE,value TEXT); 
  5. CREATE TABLE sqlite_sequence(name,seq); 
  6. CREATE TABLE system (_id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT UNIQUE ON C 
  7. ONFLICT REPLACE,value TEXT); 
  8. CREATE INDEX secureIndex1 ON secure (name); 
  9. CREATE INDEX systemIndex1 ON system (name); 
  10. sqlite> 

网站标题:Android SQLite3命令详解教程
网页链接:http://www.shufengxianlan.com/qtweb/news20/214820.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联