转载请注明出处: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文件夹下,例如以下图所看到的:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ3VvbGluX2Jsb2c=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />

全部应用程序的本地存储文件都是存放在这个文件夹以下的。为了要让不同应用程序之间的数据容易差别开来。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命令来打开数据库,例如以下图所看到的:

好的。数据库已经打开了。那么我们怎么才干知道当前数据库中有哪些表呢?非常easy,.table命令就能够做到了:

哇。居然有这么多张表!是的,联系人的数据结构非常复杂,非常多的数据都是分表存储的。

这里我们随便挑一张表,比方说accounts表,假设我想知道这张表中有哪些列应该怎么办呢?在MySQL中能够使用desc accounts这个命令,但SQLite却不认识这个命令。毕竟它们是有差异化的。SQLite中能够使用pragma table_info(TABLE_NAME)这个命令来查看表的数据结构,例如以下图所看到的:

能够看到。一共显示了三条结果,表示accounts表中共同拥有三列。

可是,全部的字段都缩在了一行里面。并用“|”符号分隔。这样我们非常难看出每一个字段的含义。非常easy,仅仅须要换一种显示模式即可了。比方说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数据库。选择内置数据库查看器,然后随便点击一张表就能够查看到里面的数据了,例如以下图所看到的:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ3VvbGluX2Jsb2c=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />

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

好了,今天的解说就到这里,下篇文章当中我将带领大家探究Android数据库中很多其他的奥秘。感兴趣的朋友请继续阅读 Android数据库高手秘籍(二)——创建表和LitePal的基本使用方法 。

第一时间获得博客更新提醒,以及很多其他技术信息分享。欢迎关注我的微信公众号,扫一扫下方二维码或搜索微信号guolin_blog,即可关注。

Android数据库高手秘籍(一)——SQLite命令的更多相关文章

  1. Android数据库高手秘籍:SQLite命令

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

  2. Android数据库高手秘籍(零)——前言

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/38083103 在我刚開始接触Android的时候甚至都不敢相信.Android系统 ...

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

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

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

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

  5. Android数据库高手秘籍(五)——LitePal的存储操作

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/39345833 经过前面几篇文章的学习,我们已经把LitePal的表管理模块的功能都 ...

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

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

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

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

  8. Android数据库代码优化(2) - 从SQLite说起

    从SQLite说起 如果没有SQLite的基础,我们只是从Android封装的SQLite API去学习的话,难免思路会受到限制.所以,我们还是需要老老实实从头开始学习SQLite. 当我们有一身的S ...

  9. Android内部自带的SQLite数据库操作dos命令

    1:什么叫做SQLite数据库 Android系统内核是Linux系统,Android系统很特殊,他自带了一个SQLite数据库,轻量型的一款嵌入式的数据库 它占用资源非常的低,在嵌入式设备中,可能只 ...

随机推荐

  1. C++操作符的优先级

    C++操作符的优先级 C++操作符的优先级 操作符及其结合性 功能 用法 L L L :: :: :: 全局作用域 类作用域 名字空间作用域 ::name class::name namespace: ...

  2. ubuntu无法解析主机错误与解决的方法

    今天在用命令行进行操作的时候,出现了无法解析主机的错误.google了一下,原来是hosts文件的问题.更改过来即可了 进入终端,输入 sudo gedit /etc/hosts.输入password ...

  3. notepad++ 配置笔记

    0.notepad++简单介绍 Notepad++是一套很有特色的自由软件的纯文字编辑器,有完整的中文化接口及支援多国语言撰写的功能.它的功能比 Windows 中的 Notepad更强大.Notep ...

  4. Eclipse用法和技巧五:生成说明文档2

    上面一篇文章里面我们介绍了一种生成可以被JDK提取到,生成JavaDoc的添加注释方法.下面再补充一种生成这种注释的方法,上图: 步骤一:光标移动到需要添加注释的语句旁边,快捷键:shift + al ...

  5. cocos2d-x游戏开发(十五)游戏加载动画loading界面

    个人原创,欢迎转载:http://blog.csdn.net/dawn_moon/article/details/11478885 这个资源加载的loading界面demo是在玩客网做逆转三国的时候随 ...

  6. 用angularjs开发下一代web应用(二):angularjs应用骨架(二)

    1.浅谈非入侵式JavaScript <div ng-click="doSomething()">...</div>这些指令和原来的事件处理器有下面不同之处 ...

  7. Visio中添加、移动或删除形状上的连接点的方法

    Visio中添加.移动或删除形状上的连接点的方法 利用Visio画图时,学会使用连接点能使你的画图质量和速度大幅度提高.下面在Visio2010中,以一个例子讲述如何使用连接点. 一. 准备 1. 打 ...

  8. 测试framebuffer

    static GGLContext *gr_context = 0; static GGLSurface gr_framebuffer[2]; static unsigned gr_active_fb ...

  9. eval 捕获错误

    eval 捕获错误: [root@dr-mysql01 ~]# cat t1.pl use DBI; my $dbUser='zabbix'; my $user="root"; m ...

  10. cuzysdk购物模块 36kr+本期背景图

    说好的剧透,虽然来的稍微晚不少 cuzysdk(www.cuzy.com) 是一个手机淘宝客sdk,通过使用cuzy,可以获取taobao平台的推广商品数据,移动开发者把推广的商品数据呈现给用户,用户 ...