android sqlite的命令使用

转载博客:http://ju.outofmemory.cn/entry/218012
转载博客:http://blog.csdn.net/jscese/article/details/40016701

相关参考博客:http://www.jianshu.com/p/d224db2b1755


手机数据库保存在data目录下,首先去目录下找到.db文件;

adb访问data目录

一般情况下在真机上是无法进入/data/data 目录的,我们开发的app的一些缓存文件就放在这,像数据库,配置文件,缓存文件,lib等等,有时候我们就想导出数据库等文件,但是没有root的真机,无法进入这个目录。有以下两种方式解决:

方法一

买个专门的开发机,像小米有开发者系统。如果一般的手机必须root

方法二

首先命令行运行(进入adb命令汗终端)

adb shell 

然后(不经过data/data/直接进入到自己的开发的项目的包名目录)

run-as com.your.package

然后 (查看自己的apk的包名下的东西)

ls -l

然后将文件拷贝到/sdcard/目录下

cd databases假设有个叫yourpackagename.db的数据库文件

cat yourpackagename.db> /sdcard/yourpackagename.db

然后用adb pull 导出到电脑。

注意执行这行的时候要,退出adb shell ,也就是在以上命令行中执行,exit

adb pull /sdcard/yourpackagename.db~/

注意:

1.使用run-as后,是无法使用cp命令将应用数据拷贝到sd卡的,没有权限

2.如果apk已经签名,并且设置了android:debuggable=”false”,将无法使用该命令。

3.如果无法使用run-as来直接获取应用数据,可以在自己的应用里实现读取应用数据到sd卡的功能,应用本身对自己的数据是有访问权限的。

4./data/data/com.packagename/lib目录不需要执行run-as就拥有访问权限,为apk间共享so提供了便利


找到数据库就可以使用命令来对它操作了;



sqlite3基本命令操作


一.概念:

        sqlite3 为Android所使用的轻量级数据库,小巧方便,用于管理android系统中的各种db文件,在ubuntu中可以安装sqliteman 来查看android系统中的db文件,Framework中的接口位置:/frameworks/base/core/Java/android/database/sqlite/SQLiteDatabase.java

二.shell使用:

      我使用的是ubuntu的minicom下的shell终端,以系统setting的database为例,目录为:/data/data/com.android.providers.settings/databases/setting.db

cd 到databases目录下,打开数据库文件:sqlite3 setting.db

    SQLite version 3.7.11 2012-03-20 11:35:50                                                                                                  
    Enter ".help" for instructions                                                                                                             
    Enter SQL statements terminated with a ";"                                                                                                 
    sqlite>   


可以看到SQL版本,以及简单提示,使用SQL语句时需要以 “;” 分号结尾!sqlite3  *.db 打开数据库,如果存在就打开操作,如果不存在就创建,修改之后能够保存创建。


使用.help 查看帮助:

.backup ?DB? FILE      Backup DB (default "main") to FILE
.bail on|off           Stop after hitting an error.  Default OFF
.binary on|off         Turn binary output on or off.  Default OFF
.clone NEWDB           Clone data into NEWDB from the existing database
.databases             List names and files of attached databases
.dbinfo ?DB?           Show status information about the database
.dump ?TABLE? ...      Dump the database in an SQL text format
                         If TABLE specified, only dump tables matching
                         LIKE pattern TABLE.
.echo on|off           Turn command echo on or off
.eqp on|off            Enable or disable automatic EXPLAIN QUERY PLAN
.exit                  Exit this program
.explain ?on|off?      Turn output mode suitable for EXPLAIN on or off.
                         With no args, it turns EXPLAIN on.
.fullschema            Show schema and the content of sqlite_stat tables
.headers on|off        Turn display of headers on or off
.help                  Show this message
.import FILE TABLE     Import data from FILE into TABLE
.indexes ?TABLE?       Show names of all indexes
                         If TABLE specified, only show indexes for tables
                         matching LIKE pattern TABLE.
.limit ?LIMIT? ?VAL?   Display or change the value of an SQLITE_LIMIT
.log FILE|off          Turn logging on or off.  FILE can be stderr/stdout
.mode MODE ?TABLE?     Set output mode where MODE is one of:
                         ascii    Columns/rows delimited by 0x1F and 0x1E
                         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 strings
                         tabs     Tab-separated values
                         tcl      TCL list elements
.nullvalue STRING      Use STRING in place of NULL values
.once FILENAME         Output for the next SQL command only to FILENAME
.open ?FILENAME?       Close existing database and reopen FILENAME
.output ?FILENAME?     Send output to FILENAME or stdout
.print STRING...       Print literal STRING
.prompt MAIN CONTINUE  Replace the standard prompts
.quit                  Exit this program
.read FILENAME         Execute SQL in FILENAME
.restore ?DB? FILE     Restore content of DB (default "main") from FILE
.save FILE             Write in-memory database into FILE
.scanstats on|off      Turn sqlite3_stmt_scanstatus() metrics on or off
.schema ?TABLE?        Show the CREATE statements
                         If TABLE specified, only show tables matching
                         LIKE pattern TABLE.
.separator COL ?ROW?   Change the column separator and optionally the row
                         separator for both the output mode and .import
.shell CMD ARGS...     Run CMD ARGS... in a system shell
.show                  Show the current values for various settings
.stats on|off          Turn stats on or off
.system CMD ARGS...    Run CMD ARGS... in a system shell
.tables ?TABLE?        List names of tables
                         If TABLE specified, only list tables matching
                         LIKE pattern TABLE.
.timeout MS            Try opening locked tables for MS milliseconds
.timer on|off          Turn SQL timer on or off
.trace FILE|off        Output each SQL statement as it is run
.vfsname ?AUX?         Print the name of the VFS stack
.width NUM1 NUM2 ...   Set column widths for "column" mode
                         Negative values right-justify

可以看到所支持的命令,其中常用的:

.database  显示数据库信息;包含当前数据库的位置
.tables  或者 .table 显示表名称 没有表则不显示
.schema  命令可以查看创建数据对象时的SQL命令;

.mode csv|column|insert|line|list|tabs|tcl   改变输出格式

.drop table table_name           删除表
.exit                       退出

显示表所有内容: .dump table_name


默认情况,使用 select * from system 查看system表的全部数据:

    sqlite> select * from system;  
    1|volume_music|15  
    2|volume_ring|5  
    3|volume_system|7  
    4|volume_voice|4  
    5|volume_alarm|6  
    6|volume_notification|5  
    7|volume_bluetooth_sco|7  
    ...   

可以看到是列表的形式显示出来的,而且ID name value 都是以 “ | ” 分隔开来,分割符号由 .separator "X" 来定义,X即为分割符!

使用 .mode column 之后:

    sqlite> .mode column  
    sqlite> select * from system;  
    1           volume_music  15          
    2           volume_ring   5           
    3           volume_syste  7           
    4           volume_voice  4           
    5           volume_alarm  6           
    6           volume_notif  5           
    7           volume_bluet  7    

其它类似,都只是为了 改变输出的格式而已。


1.创建指令:

    sqlite> .schema system  
    CREATE TABLE system (_id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT UNIQUE ON CONFLICT REPLACE,value TEXT);  
    CREATE INDEX systemIndex1 ON system (name);  

创建的时候指定参数和属性,这里有三个,并且自增,关于数据类型:

NULL: 这个值为空值
INTEGER: 值被标识为整数,依据值的大小可以依次被存储为1,2,3,4,5,6,7,8个字节
REAL: 所有值都是浮动的数值,被存储为8字节的IEEE浮动标记序号.
TEXT: 文本. 值为文本字符串,使用数据库编码存储(TUTF-8, UTF-16BE or UTF-16-LE).
BLOB: 值是BLOB数据,如何输入就如何存储,不改变格式.

2.插入数据:

    sqlite> .mode insert  
    sqlite> select * from system;  
    INSERT INTO table VALUES(1,'volume_music','15');  
    INSERT INTO table VALUES(2,'volume_ring','5');  
    INSERT INTO table VALUES(3,'volume_system','7');  
    INSERT INTO table VALUES(4,'volume_voice','4');  
    INSERT INTO table VALUES(5,'volume_alarm','6');  
    INSERT INTO table VALUES(6,'volume_notification','5');  
    INSERT INTO table VALUES(7,'volume_bluetooth_sco','7');  

如我要在system表里面插入一条数据:

insert into system values('45','sqlite','jscese');  

这里插入数据要跟创建的时候数量要对应,不然会报:

Error: table table_name has * columns but * values were supplied

3.查询指定数据:

sqlite> select * from system where name='sqlite';  
INSERT INTO table VALUES(45,'sqlite','jscese');

根据表类型值来筛选查询,这里表的属性有 _id ,name,value ,可在创建命令中看到!

4.删除数据:

    delete from system where value='jscese';  

删除整个表: drop table table_name

5.更新表数据:

    45|sqlite|jscese  
    sqlite> update system set name='sqlite3' where value='jscese';  
    sqlite> select * from system where value='jscese';  
    45|sqlite3|jscese  

6.操作问题:

在使用SQL指令之后没有加 分号就 enter,会进入输入模式,这个时候再补上 一个 ; 分号即可:

    sqlite> select * from system  
       ...> ;  

我直接在minicom下使用 sqlite 无法识别 上下左右方向键,以及 回退键!

出现 ^[[A  ^H 这样的乱码,

网上别人给出的,我没试过~http://ljhzzyx.blog.163.com/blog/static/3838031220102595026789/

本机终端adb shell 是可以识别 回退键的

一般退出sqlite3 使用 .quit

实在退不出   ...> 模式 就使用   ctrl+D  强退!










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值