Android数据存储—— SQL Database

1. 概述

  对于一些结构非常明确的数据,或者是重复性比较高的数据,把它存储在数据库中是最好的选择。比方说是联系人,每一个联系人都会有姓名,手机号,电话,邮箱,住址等信息,当然可能会有一些字段存储的时候会是空的。对于每一个联系人来说,结构都是十分明确清晰的,这样,利用数据库来存储信息是比较合适,也是比较方便的。

1.1 SQLite数据库

1.1.1 SQLite简介

  Android系统中所采用的数据库是sqlite,这是一个轻量级的关系型数据库,主要是为嵌入式设备所设计的,所占的体积非常小,总共还不到500KiB,非常适合在移动设备上使用。sqlite并不是专门为Android专门设计的,其他的移动设备也是可以使用的,同时它还支持很多的操作系统,包括windows, linux, iOS等等,支持多种编程语言接口,跨平台性非常强。到2015年11月的时候,sqlite已经更新到v3.9.2了,所以一般在使用的时候,也叫它sqlite3,可能随着版本的更新,以后这个叫法也可能会随着更新。

1.1.2 SQLite的特点

  作为一个在移动设备上使用的数据库,sqlite有许多的优点,下面列出了它的一些特性:

  • 支持大多数SQL92标准
  • 所占空间小,可存储的数据量大(最多可以存储2TB的数据)
  • 无需用户名和密码即可连接
  • 不需要安装,可以随时拿过来用
  • 单文件,每个数据库的数据都存在一个文件中,保存在磁盘上
  • 支持事务,简化复杂的操作
  • 支持多语言(C/C++,Java,Objective-C,PHP,C#,Perl,python等)和和多平台
  • 弱类型,支持5种类型数据(NULL,INTEGER,REAL,TEXT,BLOB),但是可以存很多种数据
  • 等等等……

  关于sqlite的更多特性,可以去sqlite官网上了解。

2. 定义Schema和Contract

  这两个是数据库中的概念,Schema是数据库组织形式的声明,在SQL中反映为数据库的建表语句()。Contract,直译过来是合同的意思,可以把它理解成一种协议,从它的用法上可能会更容易理解一些。在使用数据库的时候,可以声明一个Contract类,这个类就相当于一个容器,里面放着一些常量,比如数据库的表名、属性名、Uri等等。这么做的一个好处是,可以对数据库进行统一的管理,如果有一天你想改变数据库表中的某一个字段名,你只需要在这里改就可以了,不用到代码中到处去改。
  那么怎么定义这个Contract类呢?官方推荐这么写:

public final class FeedReaderContract {
   
    // To prevent someone from accidentally instantiating the contract class, give it an empty constructor.(为了防止在程序中不小心实例化了这个类,这里写了一个空的构造方法)
    public FeedReaderContract() {}

    /* Inner class that defines the table contents (定义了一个静态抽象类,放一些跟表有关的属性)*/
    public static abstract class FeedEntry implements BaseColumns {
   
        public static final String TABLE_NAME = "entry";
        public static final String COLUMN_NAME_ENTRY_ID = "entryid";
        public static final String COLUMN_NAME_TITLE = "title";
        public static final String COLUMN_NAME_SUBTITLE = "subtitle";
        ...
    }
}

  这里定义了一个内部抽象类,它实现了BaseColumns接口,好像很厉害的样子。实际上这个接口里只有两个String类型的常量,一个_COUNT,一个_ID,这两个属性许多的Android类都有,当然了,实现这个接口并不是必须的,因为我们自己的数据库表不一定有这两个属性,为什么这么写呢,这里引用官方文档上的说法,是为了“让你的数据库和Android框架和谐地运作(help your database work harmoniously with the Android frame)”。
  看起来还是不太好理解,简单一点来解释一下。上面说到了SQLite数据库是单文件的,一个程序的数据库就是一个文件,那么这里呢,就写了一个Contract类来管理数据库常量,然后为数据库中的每一张表都定义一个内部抽象类,放一些常量,这样,数据库的结构就非常的明确了。

3. 操作数据库

   上面讲了一堆理论,接下来就是实际应用了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值