热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

androidsqlite的命令使用

转载博客:http:ju.outofmemory.cnentry218012转载博客:http:blog.csdn.netjscesearticledetails40016701相

转载博客: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 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  强退!











推荐阅读
  • Android 常用工具类源码大全
    Android常用工具类源码大全 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • Java自带的观察者模式及实现方法详解
    本文介绍了Java自带的观察者模式,包括Observer和Observable对象的定义和使用方法。通过添加观察者和设置内部标志位,当被观察者中的事件发生变化时,通知观察者对象并执行相应的操作。实现观察者模式非常简单,只需继承Observable类和实现Observer接口即可。详情请参考Java官方api文档。 ... [详细]
  • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
    本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
  • Python语法上的区别及注意事项
    本文介绍了Python2x和Python3x在语法上的区别,包括print语句的变化、除法运算结果的不同、raw_input函数的替代、class写法的变化等。同时还介绍了Python脚本的解释程序的指定方法,以及在不同版本的Python中如何执行脚本。对于想要学习Python的人来说,本文提供了一些注意事项和技巧。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 数组的排序:数组本身有Arrays类中的sort()方法,这里写几种常见的排序方法。(1)冒泡排序法publicstaticvoidmain(String[]args ... [详细]
  • 面向对象之3:封装的总结及实现方法
    本文总结了面向对象中封装的概念和好处,以及在Java中如何实现封装。封装是将过程和数据用一个外壳隐藏起来,只能通过提供的接口进行访问。适当的封装可以提高程序的理解性和维护性,增强程序的安全性。在Java中,封装可以通过将属性私有化并使用权限修饰符来实现,同时可以通过方法来访问属性并加入限制条件。 ... [详细]
  • Vagrant虚拟化工具的安装和使用教程
    本文介绍了Vagrant虚拟化工具的安装和使用教程。首先介绍了安装virtualBox和Vagrant的步骤。然后详细说明了Vagrant的安装和使用方法,包括如何检查安装是否成功。最后介绍了下载虚拟机镜像的步骤,以及Vagrant镜像网站的相关信息。 ... [详细]
  • 摘要:1、有两台服务器(1)看代码网(记为A):内网IP:10.186.73.30 ... [详细]
  • 安卓主要是通过什么开发的?春招我借这份PDF的复习思路,持续更新中
    金九银十过后各大网络平台都是各种面经分享,包括已收offer,或面试失败的都有,相信大部分人都拿到了自己心仪的大厂offer, ... [详细]
author-avatar
好人木庄子mzz
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有