android的联系人等数据以sqlite3的数据库形式存放,这多少有点儿出人意外。如何通过sqlite3直接访问这些数据库呢?
启动一个android虚拟机后(当然也可用adb启动),在android sdk的platform tools目录下,用adb shell,进入shell命令状态。(在虚拟机上dev tools中,打开终端模拟器,可跑sqlite3,亦可用这些命令,但由于无root权限,进入某些目录会有问题)cd data,进入模拟器的安装程序目录,再cd data ,进入数据目录,可看到所有应用的包名,进入某一包名,会找到或在databases目录下找到XXXX.db,即是此应用的sqlite3数据库。
以下以android例子的com.example.android.notepad例子为例。进入包名/database目录下,发现note_pad.db。
用sqlite3 not_pad.db打开该数据库。.help可显示sqlite3中所有命令(均以.起头),注意,note_pad.db需加上.db,否则sqlite3会为你创建一新库note_pad。
.tables显出所有表。可看到有notes表
select * from notes;显示出此表数据,正是在测试此notespad时插入的几条数据,当然中文在命令行模式下显示不正常。回到模拟器中该应用,插入英文note一条,再次select 该表,果然显示出新加的数据。最前面一列的整数据称是系统自动生成。
默认情况下显示数据列以“|”分隔,若想更清晰的显示,可如下设置:
.mode column 以列模式显示
.header on 显示列头名
这样就和其它数据库如mysql等显示比较一致了。
如何看到此表的列名称呢?
.schema notes;
CREATE TABLE notes (_id INTEGER PRIMARY KEY,title TEXT,note TEXT,created INTEGER,modified INTEGER);
显示出此表的创建语句,可看到第一列为_id。
sqlite> update notes set title='aaaaaaa' where _id=5;
用select及在模拟器上查看,该条note标题确实改为aaaaaa。
DUMP数据:
.dump notes
BEGIN TRANSACTION;
CREATE TABLE notes (_id INTEGER PRIMARY KEY,title TEXT,note TEXT,created INTEGER
,modified INTEGER);
INSERT INTO "notes" VALUES(1,'鐪嬪惂1111','鐪嬪惂鐪嬬湅鐪嬬湅',1302680160108,130
2771249086);
INSERT INTO "notes" VALUES(3,'骞垮憡骞垮憡骞垮憡','骞垮憡骞垮憡骞垮憡',130268022
7262,1302835188606);
INSERT INTO "notes" VALUES(4,'骞垮憡骞垮憡','骞垮憡骞垮憡',1302688689028,1302688
699108);
INSERT INTO "notes" VALUES(5,'aaaaaaa','sunwei hahahaha
',1303091079578,1303091120585);
COMMIT;
可将此表及数据dump出来(当然是屏幕上)。
若要将数据库文件dump入一个文本文件呢?
.dump notes;
将在标准输出显示数据库的dump。
若前加.output /data/kkk.sql,则会将执行的sql命令及select输出的结果等存入kkk.sql,然而对于.dump,仅会显示BEGIN TRAN和COMMIT。无其中内容。如何将内容dump入文件呢?
sqlite3 note_pad.db ".dump" >kkk.sql 等效于echo ".dump" | sqlite3 note_pad >kkk.sql
在系统下执行以上命令即可。实际上是利用sqlite3的命令行行式和系统的重定向功能。因为
sqlite3 note_pad.db "select *from notes;"可连接数据库并执行select语句输出,那么重定向至文件当然可以。
那么将数据导入库呢?
sqlite3 note_pad <kkk.sql(注意,将note_pad.db中数据导入note_pad库中,note_pad非note_pad.db)
当然,此数据库也支持事务。
BEGIN TRANSACTION;COMMIT;
sqlite3 -html note_pad.db "select * from notes;",将会以html形式显示数据(大约是表格吧),若用重定向存为文件,自然就是个网页了。