转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/38461239

要想熟练地操作任何一个数据库,最最基本的要求就是要懂SQL语言,这也是每个程序员都应该掌握的技能。虽说SQL博大精深,要想精通确实很难,但最基本的一些建表命令,增删改查,大家还是必须要学会的。

SQL(Structured Query Language)是一种标准的数据库查询语言,即所有的关系型数据库都会支持它,只不过每种数据库对SQL语言的支持与标准存在着细微的不同。我们无须关心其它数据库对SQL语言的支持情况,这里我们只要把重点放在SQLite上就可以了。 下面我将使用模拟器来对SQLite支持的各种命令进行演示,如果你想用手机的话也可以,但要确保你的手机已经Root,并且包含sqlite3这个命令文件。

首先确保模拟器已经连接上了电脑,然后在命令行输入adb shell进入控制台,如下图所示:

注意#符号表示我们当前已经是超级用户了,如果显示的是$符号,表示当前只是普通用户而已,这时还需要输入su命令切换一下用户身份才行。

有了超级用户权限之后,我们能做的事情就很多了,这里我们先查看一下系统自带的联系人表吧。进入到/data/data目录下,如下图所示:

所有应用程序的本地存储文件都是存放在这个目录下面的。为了要让不同应用程序之间的数据容易区别开来,Android是使用应用程序包名进行分开管理,也就是说每个应用程序的本地存储文件都会存放在自己应用程序包名的那个目录下,这里我们ls一下看看有多少子目录:

OK,确实有很多,毕竟手机上所有的应用程序都在这里。其中,com.android.providers.contacts中存放的就是联系人的相关数据,我们进入到这个目录再ls一下:

可以看到,目前有databases、files、lib和shared_prefs这几个子目录。其中databases肯定是用于存放数据库文件的,files是用于存放普通文本文件的,lib是用于存放so库的,shared_prefs则是用于存放shared文件的。这是Android数据持久化的几种可选方式,对这部分内容不太了解的朋友可以参考《第一行代码——Android》的第六章。

接着进入到databases目录中,再ls:

其中后缀名为journal的文件是日志文件,我们不用管,contacts2.db和profile.db才是真正的数据库文件,可以使用sqlite3命令来打开数据库,如下图所示:

好的,数据库已经打开了,那么我们怎么才能知道当前数据库中有哪些表呢?很简单,.table命令就可以做到了:

哇,竟然有这么多张表!是的,联系人的数据结构非常复杂,很多的数据都是分表存储的。这里我们随便挑一张表,比如说accounts表,如果我想知道这张表中有哪些列应该怎么办呢?在MySQL中可以使用desc accounts这个命令,但SQLite却不认识这个命令,毕竟它们是有差异化的。SQLite中可以使用pragma table_info(TABLE_NAME)这个命令来查看表的数据结构,如下图所示:

可以看到,一共显示了三条结果,表示accounts表中共有三列。但是,所有的字段都缩在了一行里面,并用“|”符号分隔,这样我们很难看出每个字段的含义。很简单,只需要换一种显示模式就行了,比如说line模式就挺不错的。输入.mode line命令切换显示模式,然后重新运行pragma命令,结果如下图所示:

怎么样,这样就清晰多了吧?这三列的列名分别是account_name、account_type和data_set,数据类型都是TEXT(字符串),允许为空,并且都不是主键。好,那我现在想查一查accounts表中的数据呢?这就太简单了,使用select语句就可以了,如下所示:

恩?怎么只有一条空数据啊。貌似模拟器上默认就是这样的,如果你用的是手机的话,这里应该就可以查到真正的数据了。不过没关系,我们可以在设置里面手动添加一个邮箱账户,如下图所示:

现在再来重新查询一遍accounts表,如下所示:

OK,添加的新账户已经成功查出来了。

除了查询命令之外,还有其它的增删改命令都和标准的SQL语法是相同的,即insert、delete和update,由于比较简单,我就不再赘述了。比较值得一提的是,每个SQLite数据库中都还有一个隐藏的sqlite_master表,这里记载了当前数据库中所有表的建表语句,可以使用select * from sqlite_master命令进行查看:

结果太多了是不是?一屏根本就显示不下嘛。不要着急,别忘了我们使用的是select命令,可以使用where语句来过滤出我们想要查询的那部分内容,如下图所示:

OK,CREATE TABLE accounts (account_name TEXT, account_type TEXT, data_set TEXT) 这就是accounts表的建表语句了,通过这种方式我们可以查询到任意一张表的建表语句,从而对我们学习和分析数据库表结构有所帮助。

有些朋友可能会觉得,每次都要输入select命令来查询表中的数据太麻烦了。没错,而且还要保证手机是连接在电脑上的时候才能查询,确实太不方便。幸运的是,有些手机软件已经提供了数据库表查询的功能,使得我们随时随地都可以方便地查看数据库中的数据,比如Root Explorer这款软件就不错。

仍然是确保你的手机已经Root,然后安装Root Explorer,打开软件之后按照我们前面介绍的路径,进入/data/data/com.android.providers.contacts/databases,点击contacts2.db数据库,选择内置数据库查看器,然后随便点击一张表就可以查看到里面的数据了,如下图所示:

使用这种方法,我们可以随时查看数据库表中的最新数据,直观又方便,在程序开发的时候可以起到非常大的帮助。

好了,今天的讲解就到这里,下篇文章当中我将带领大家探究Android数据库中更多的奥秘。

Android数据库高手秘籍(一)——SQLite命令相关推荐

  1. 转载-Android数据库高手秘籍(一)——SQLite命令

     原文地址: http://blog.csdn.net/guolin_blog/article/details/38461239 Android数据库高手秘籍(一)--SQLite命令 分类: And ...

  2. Android数据库高手秘籍(二):创建表和LitePal的基本用法

    原文:http://blog.jobbole.com/77157/ 上一篇文章中我们学习了一些Android数据库相关的基础知识,和几个颇为有用的SQLite命令,都是直接在命令行操作的.但是我们都知 ...

  3. Android数据库高手秘籍(三)——使用LitePal升级表

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/39151617 在上一篇文章中,我们学习了LitePal的基本使用方法,体验了使用框 ...

  4. Android数据库高手秘籍(六)——LitePal的修改和删除操作

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/40083685 在上一篇文章中,我们学会了使用LitePal进行存储数据的功能.确实 ...

  5. Android数据库高手秘籍(九),赶快使用LitePal 2.0版本吧

    转载请注明出处:https://blog.csdn.net/guolin_blog/article/details/80586028 本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 ...

  6. Android数据库高手秘籍

    原文出处:作者:郭霖,http://blog.csdn.net/column/details/android-database-pro.html 升级表 然而大家都知道,创建表只是数据库操作中最基本的 ...

  7. Android数据库专家秘籍(七)经验LitePal查询艺术

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/40153833 经过了多篇文章的学习,我们已经把LitePal中的绝大部分内容都掌握 ...

  8. android数据库格式化,正确格式化SQLite SQL语句

    我有一些创建语句,应该在我的Android应用程序中首次创建数据库时运行.它们被格式化为这样:正确格式化SQLite SQL语句 name="uaDBcreates"> CR ...

  9. android 数据库 数组,如何从SQLITE数据库中获取数据到android中的数组?

    在查询数据库时,您仍然会有一个光标,但是一旦获得光标,您可以迭代它,将所需的值拉出到数组中,如下所示: DbAdapter db = new DbAdapter(mContext); int colu ...

最新文章

  1. Android源码解析:UI绘制流程之控件绘制
  2. python九九乘法口诀表-python 99乘法口诀表
  3. 源码解读Mybatis List列表In查询实现的注意事项
  4. js调用c语言程序设计,HTML页面,测试JS对C函数的调用简单实例
  5. SAP Spartacus 捕捉 PageEvent 的方式
  6. apriori算法代码_sklearn(九)apriori 关联规则算法,以及FP-growth 算法
  7. Github如何提交修改的代码以及更新到最新版本
  8. CentOS7安装MySQL初始密码设置:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password:
  9. 【BZOJ3489】A simple rmq problem(树套树)
  10. linux dns服务无效,Linux下搭建DNS服务器及踩坑
  11. slid.es – 创建在线幻灯片和演示文稿的最佳途径
  12. 17track逆向分析
  13. 人工智能2021截稿日期_2019年136个国际学术会议资讯 (含截稿日期)
  14. 打印机 针式打印机 热敏打印机
  15. git 报错:unable to access “http://gitlab.tydic.com:7666/tx-preformance/tx……“解决方法
  16. 平面设计中立体表现技法
  17. java根据jpg格式图片或视频文件生成gif动图
  18. 通过opencv实现将图片转换为视频
  19. A股上市公司裁判文书数据
  20. Odata数据展示_SAP刘梦_新浪博客

热门文章

  1. MySQL 的 RowNum 实现
  2. 试写函数显示当前具体时间:
  3. 改变背景色为苹果绿--保护眼睛
  4. 淘宝登货员1.02(重要升级)
  5. windows设置自动清理log
  6. eclipse导入远程库的git项目
  7. IOS 本地推送 IOS10.0以上 static的作用 const的作用
  8. selenium IE 浏览器驱动下载地方
  9. 基础 - jQuery选项卡
  10. vim global命令