启动一个Android虚拟机后(当然也可用adb启动),在Androidsdk的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,'测试测试','测试测试测试',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形式显示数据(大约是表格吧),若用重定向存为文件,自然就是个网页了。
原创文章,作者:苏葳,如需转载,请注明出处:https://www.swmemo.com/285.html