如何使用 sqlite3 访问 Android 手机的数据库

如何设置Android手机的sqlite3命令环境

http://www.cnblogs.com/linjiqin/archive/2011/11/28/2266619.html

SQLite3 为android所使用的轻量级数据库,小巧方便,用于管理android系统中的各种db文件。

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 退出命令行接口

.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‘);

ghghg

时间: 2024-10-05 07:29:02

如何使用 sqlite3 访问 Android 手机的数据库的相关文章

如何设置Android手机的sqlite3命令环境

转载自:http://blog.csdn.net/ygsyyl/article/details/8144407 1.在PC环境下启动一个模拟器(不是手机) 2.查看模拟器 /systen/xbin是否有sqlite3命令 adb shell cd /system/xbin ls 3.把模拟器 /system/xbin/sqlite3命令文件从模拟器拷到PC上 adb pull /system/xbin/sqlite3 e:/eclipse 4.关闭模拟器,把Android手机连接到PC 5.获取

如何从android手机中把自己的数据库给COPY出来

============问题描述============ 自己写个APK,安装在android手机,程序运行时会创建一个SQLITE的数据库: 用eclipse,可以看到数据库的位置,我把手机插入电脑,打USB连接后,却不能在手机中找到数据库文件(APK绝对是安装在SD卡上的),有人说要有ROOT的权限.不知如何实现,如果要写一个程序来实现,请高手指点思想,列出相关重点函数,谢谢 ============解决方案1============ 自己的应用复制自己的数据库,无需root,直接文件复制就

如何设置Android手机的sqlite3命令环境 TitaniumBackup

1.在PC环境下启动一个模拟器(不是手机) 2.查看模拟器 /systen/xbin是否有sqlite3命令adb shell cd /system/xbin ls3.把模拟器 /system/xbin/sqlite3命令文件从模拟器拷到PC上adb pull /system/xbin/sqlite3 e:/eclipse4.关闭模拟器,把Android手机连接到PC5.获取Android手机 /system 文件夹的读取权限adb shell # mout -o remout, rw -t y

在用Kivy开发Python手机游戏时通过Plyer扩展访问Android传感器

这是一篇发表在kivyspacegame上的文章,讲的是如何使用python在你的安卓设备上访问传感器.这篇教程是为这些用kivy开发python移动apps而写的.Kivy运行速度非常快,并且很容易使用.访问博客以获取更多的关于用Kivy开发游戏的教程.也可以看看google play store上的Helios: Mining Adventure游戏程序. 这篇教程将关注plyer,一个可以读取传感器,发送email,以及将文本转成语音,显示通知等等功能的库.如果你正在用python开发移动

android操作sqlite数据库及心得

写这篇文章主要是网上的对sqlite的操作太多且太杂,很多时候都不能很好的运用到自己的项目中,结构不清晰,我自己写了一篇适合刚刚接触的人看的操作方法. 近来用android时要将一些数据保存起来,一开始用的是preferences,后来要保存的东西多了,发现用preferences明显不能满足要求了,而且发现用这个的话代码就变得有点乱了,所以才开始学习使用sqlite数据库,一开始以为不就是个数据库么,和平时的mysql啊或者是sqlserver都一样,都很简单的,但后来真正在用的时候才发现困难

android中的数据库操作(转)

android中的数据库操作 android中的应用开发很难避免不去使用数据库,这次就和大家聊聊android中的数据库操作. 一.android内的数据库的基础知识介绍 1.用了什么数据库   android中采用的数据库是SQLite这个轻量级的嵌入式开源数据库,它是用c语言构建的.相关简介可以从链接查看. 2.数据库基本知识观花   对于一些和我一样还没有真正系统学习数据库技术的同学来说,把SQL92标准中的一些基本概念.基本语句快速的了解一下,是很有必要的,这样待会用Android的da

android中的数据库操作【转】

http://blog.csdn.net/nieweilin/article/details/5919013 android中的数据库操作 android中的应用开发很难避免不去使用数据库,这次就和大家聊聊android中的数据库操作. 一.android内的数据库的基础知识介绍 1.用了什么数据库   android中采用的数据库是SQLite这个轻量级的嵌入式开源数据库,它是用c语言构建的.相关简介可以从链接查看. 2.数据库基本知识观花   对于一些和我一样还没有真正系统学习数据库技术的同

Socket Android手机客户端与PC服务端局域网内联测试

Socket Android手机客户端与PC服务端局域网内联测试,笔者采用的是 PC服务器,Android平板客户端 ,PC模拟器客户端, 前段时间为了加深对Socket通信的印象和知识的深度掌握,我模仿了QQ的一些元素,也借鉴了其他牛人的一些源码思想,写了 一个 叫 IQ 的 Android 聊天软件,该软件大致由 Android客户端.JAVA pc服务端.mysql数据库组成,客户端和服务端都 比较多的用到了读写的IO流,SCOKET,线程等,这篇博客主要给大家介绍测试环境,不讲源码实现方

android手机安全卫士、Kotlin漫画、支付宝动画、沉浸状态栏等源码

Android精选源码 轻量级底部导航栏 android手机卫士源码 android实现高仿今日头条源码 一个用Kotlin写的简单漫画App源码 android吐槽项目完整源码 实现可以滑动文字逐渐变色的TabLayout android实现将app隐藏加密功能的源码 android实现横向滚动的卡片堆叠布局 android仿支付宝的咻咻动画源码 android状态栏和沉浸式导航栏管理源码 Android优质博客 从BaseActivity与BaseFragment的封装谈起 这篇博客主要是从