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

Android数据库操作(一)——基本SQLite命令

1、前言SQLite数据库系统特点轻型,嵌入式,ACID关系型数据库SQLite优缺点优点:轻量、高效绿色无需“安装”零配置动态数据类型缺点:并发性能网络文件支持弱仅支持SQL功能
1、前言
SQLite数据库系统特点

轻型,嵌入式,ACID关系型数据库

SQLite优缺点
  • 优点:

轻量、高效
绿色无需“安装”
零配置
动态数据类型

  • 缺点:

并发性能
网络文件支持弱
仅支持SQL功能子集,有很多高级的功能不支持

Android平台上的Sqlite数据库用途

APP运行数据的保存,如参数等
离线功能
数据处理

Android平台SQLite使用

  • 具体使用两个类
  • SQLiteDatabase类:封装了管理数据库的各种方法,如insert、delete、update、query
  • SQLiteOpenHelper类:封装了数据库创建和版本管理
2、SQLite命令

本节摘抄自: Android数据库高手秘籍(一)——SQLite命令,强烈建议进入原博客查看学习

  • 首先确保模拟器已近连接上了电脑

  • 命令行输入 adb shell 进入控制台,如下图所示:

    《Android数据库操作(一)——基本SQLite命令》 adb shell

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

  • 有了超级用户权限之后,就可以做很多事情了,如:查看一下系统自带的联系人表
  • 通过命令行 cd data/data 进入到 /data/data目录下,如下图所示:
    《Android数据库操作(一)——基本SQLite命令》 cd data/data

所有应用程序的本地存储文件都是存放在这个目录下面的。

  • 为了要让不同应用程序之间的数据容易区别开来,Android是使用应用程序包名进行分开管理,也就是说每个应用程序的本地存储文件都会存放在自己应用程序包名的那个目录下,
  • 这里我们通过命令行 ls 一下看看有多少子目录:
    《Android数据库操作(一)——基本SQLite命令》 ls

子目录有很多,手机上所有应用程序都在这里,其中 com.android.providers.contacts就是存放联系人的相关数据

  • 通过命令行 cd 包名ls 进入查看该包下的目录:
    《Android数据库操作(一)——基本SQLite命令》 cd 具体包名+ls

可以看到,目前有databases、files、lib和shared_prefs这几个子目录。其中databases肯定是用于存放数据库文件的,files是用于存放普通文本文件的,lib是用于存放so库的,shared_prefs则是用于存放shared文件的,这是Android数据持久化的几种可选方式。

  • 接着进入到databases目录中,再 ls
    《Android数据库操作(一)——基本SQLite命令》 cd databases + ls

其中后缀名为journal的文件是日志文件,我们不用管,contacts2.dbprofile.db才是真正的数据库文件

  • 使用sqlite3命令 sqlite3 数据库文件全名 来打开数据库,如下图所示:

    《Android数据库操作(一)——基本SQLite命令》 sqlite3 数据库文件名

  • 好的,数据库已经打开了,那么我们怎么才能知道当前数据库中有哪些表呢?

  • 输入命令行 .table 就可以查看当前数据库中的表:

    《Android数据库操作(一)——基本SQLite命令》 **.table**

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

  • SQLite中可以使用pragma table_info(TABLE_NAME);这个命令来查看表的数据结构,大致如下图所示:

    《Android数据库操作(一)——基本SQLite命令》 pragma table_info(表名)

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

    《Android数据库操作(一)——基本SQLite命令》

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

    《Android数据库操作(一)——基本SQLite命令》

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

    《Android数据库操作(一)——基本SQLite命令》

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

    《Android数据库操作(一)——基本SQLite命令》 20140901221137578.png

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

    《Android数据库操作(一)——基本SQLite命令》

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

    《Android数据库操作(一)——基本SQLite命令》

**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数据库操作(一)——基本SQLite命令》

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

推荐阅读
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • mysql-cluster集群sql节点高可用keepalived的故障处理过程
    本文描述了mysql-cluster集群sql节点高可用keepalived的故障处理过程,包括故障发生时间、故障描述、故障分析等内容。根据keepalived的日志分析,发现bogus VRRP packet received on eth0 !!!等错误信息,进而导致vip地址失效,使得mysql-cluster的api无法访问。针对这个问题,本文提供了相应的解决方案。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 关于CMS收集器的知识介绍和优缺点分析
    本文介绍了CMS收集器的概念、运行过程和优缺点,并解释了垃圾回收器的作用和实践。CMS收集器是一种基于标记-清除算法的垃圾回收器,适用于互联网站和B/S系统等对响应速度和停顿时间有较高要求的应用。同时,还提供了其他垃圾回收器的参考资料。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • 十大经典排序算法动图演示+Python实现
    本文介绍了十大经典排序算法的原理、演示和Python实现。排序算法分为内部排序和外部排序,常见的内部排序算法有插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。文章还解释了时间复杂度和稳定性的概念,并提供了相关的名词解释。 ... [详细]
  • 腾讯安全平台部招聘安全工程师和数据分析工程师
    腾讯安全平台部正在招聘安全工程师和数据分析工程师。安全工程师负责安全问题和安全事件的跟踪和分析,提供安全测试技术支持;数据分析工程师负责安全产品相关系统数据统计和分析挖掘,通过用户行为数据建模为业务决策提供参考。招聘要求包括熟悉渗透测试和常见安全工具原理,精通Web漏洞,熟练使用多门编程语言等。有相关工作经验和在安全站点发表作品的候选人优先考虑。 ... [详细]
  • 数据库锁的分类和应用
    本文介绍了数据库锁的分类和应用,包括并发控制中的读-读、写-写、读-写/写-读操作的问题,以及不同的锁类型和粒度分类。同时还介绍了死锁的产生和避免方法,并详细解释了MVCC的原理以及如何解决幻读的问题。最后,给出了一些使用数据库锁的实际场景和建议。 ... [详细]
  • 我正在一个涉及SQLite的项目中,我只有一个数据库文件,现在我正在测试我的应 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
author-avatar
手机用户2502935197
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有