博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android SQLite3命令详解教程
阅读量:5291 次
发布时间:2019-06-14

本文共 7144 字,大约阅读时间需要 23 分钟。

SQLite是轻型的关系型数据库,SQLite3作为SQLite的第三个版本,支持iOS和Android应用开发。本文为Android SQLite3命令详解教程,希望大家喜欢。AD:2014WOT全球软件技术峰会北京站 课程视频发布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" 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进行解释,当时对于SQL语句你需要在末尾加上分号";"以表示SQL语句输入完成,这时你输入的命令才开始按照SQL语言进行执行。示例2:java代码:sqlite> CREATE TABLE tbl2 ( ...> f1 varchar(30) primary key, ...> 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" 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种不同的方式显示查询返回的结果:"csv", "column", "html", "insert", "line", "list","tabs", "tcl".你可以通过.mode来设置显示的方式。默认的是"list"方式,这时返回结果的一条记录显示一行,每列的内容之间用设定的分隔符隔开,默认的分隔符是"|".示例5:java代码:sqlite> .mode list sqlite> select * from tbl1; hello|10 goodbye|20 sqlite> 你可以通过".separator"来设置"list"模式下的分隔符。比如我们想把", "作为分隔符,可以这样:示例6:java代码:sqlite> .separator ", " sqlite> select * from tbl1; hello, 10 goodbye, 20 sqlite> "line"模式下, 每行只显示数据库的一行的一列。每行由列名,等号和列的值组成。每条记录之间由一个空行隔开。示例7java代码:sqlite> .mode line sqlite> select * from tbl1; one = hello two = 10 one = goodbye two = 20 sqlite> "column"模式下,每条记录都在单独一行显示。第一行显示的是列名,第二行只是用于分割列名和记录的数据,第三行开始才是记录的内容。示例8:java代码:sqlite> .mode columnsqlite> select * from tbl1; one two ---------- ---------- hello 10 goodbye 20 sqlite> 默认情况下,每列的宽度最多只能显示10个字符。所以如果数据包含的字符如果他太多,可能就显示不完。但是我们可以通过".width"设置每列的宽度。示例9:java代码:sqlite> .width 12 6 sqlite> select * from tbl1; one two ------------ ------ hello 10 goodbye 20 sqlite> 示例9就把第1列和第二列的宽度分别设置为了12和6个字符,其他列的宽度并没改变。如果你把列宽设置为0,那么调整为以下三个的最大值:10,该列的列名字符数,第一行记录该列的字符数。这样列的宽度就可以自动调整。默认的列宽就是0,以便它可以自动调整。可以通过".header"命令可以设置是否显示头(头包括第一行,列名,第二行,分隔行)。示例10:java代码:sqlite> .header off sqlite> select * from tbl1; hello 10 goodbye 20 sqlite> "insert"模式下,返回的查询结果将以SQL的INSERT语句形式进行显示。示例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"模式下,查询返回结果将以XHTML table的形式进行显示,它并不以
作为开头和
作为结尾。 但是每条记录以作为开始,作为结束,记录的数据以作为开始,以作为结束示例12:java代码:sqlite> select * from system; select * from system; 1 volume_music 7 4 volume_voice 4 sqlite> ".output"命令可以把查询返回结果的输出定向到文件上。该命令的第一个参数即是要定向的位置。在把输出定向了文件后,可以通过".output stdout"把输出重新定向到标准输出上。示例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提供了多个命令来查看数据库的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> .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"命令,在没有参数的情况,它会显示最初用于创建数据库的CREATE TABLE和CREATE INDEX的SQL语句。比如,示例16".schema"命令可以包含一个参数,它是一个pattern,用于对表进行过滤,这时只会显示满足条件的表和所有索引的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>

 

转载于:https://www.cnblogs.com/huidaoli/articles/4105021.html

你可能感兴趣的文章
《算法》C++代码 快速排序
查看>>
iframe的父子层跨域 用了百度的postMessage()方法
查看>>
Js apply方法与call方法详解 附ES6新写法
查看>>
linux php全能环境一键安装,小白福利!
查看>>
图片生成缩略图
查看>>
关于Mysql select语句中拼接字符串的记录
查看>>
动态规划 例子与复杂度
查看>>
[BZOJ4567][SCOI2016]背单词(Trie+贪心)
查看>>
查看oracle数据库的连接数以及用户
查看>>
【数据结构】栈结构操作示例
查看>>
中建项目环境迁移说明
查看>>
三.野指针和free
查看>>
activemq5.14+zookeeper3.4.9实现高可用
查看>>
TCP/IP详解学习笔记(3)IP协议ARP协议和RARP协议
查看>>
简单【用户输入验证】
查看>>
python tkinter GUI绘制,以及点击更新显示图片
查看>>
Spark基础脚本入门实践3:Pair RDD开发
查看>>
HDU4405--Aeroplane chess(概率dp)
查看>>
CS0103: The name ‘Scripts’ does not exist in the current context解决方法
查看>>
20130330java基础学习笔记-语句_for循环嵌套练习2
查看>>