内容来源:高成珍、钟元生《Android编程经典案例解析》

SQLite 数据库是Android 中内嵌的轻量级关系型数据库,本质上只是一个文件。SQLite 内部只支持NULL,INTEGER, REAL,TEXT 和BLOB 这五种数据类型,在SQLite 中可以把各种类型的数据保存到任何字段中而不用关心字段声明的数据类型是什么,例如可以把字符串类型的值存入INTEGER类型的字段中。因此在编写建表语句时可以省略数据列后面的类型声明。但有一种情况例外,定义为INTEGER PRIMARY KEY 的字段只能存储64位整数,当向这种字段保存整数以外的数据时会产生错误。

常见的SQL标准语句如下:

1. 查询:

select * from 表名 where 条件子句 group by 分组子句 having ...order by 排序子句

例如:

select name from person group by name having count(*) > 1

查询person 表中name 字段值出现超过1次的name 字段的值

2. 分页:

select * from 表名 limit 跳过的记录数, 显示的记录数

例如:

select * from person limit 3, 5

从person 表中获取5条记录,跳过前面三条记录

3. 插入:

insert into 表名(字段列表) values(值列表)

例如:

insert into person(name, age) values(‘张三’, 20)

向person表中插入一条记录,名字为小明,年龄为20岁

4. 更新:

update 表名 set 字段名=值 where 条件子句

例如:

update person set name=‘李四’ where id=10

将ID为10的记录的姓名改为李四

5.删除:

delete from 表名 where 条件子句

例如:

delete from person where id=10

删除person中ID为10的记录

与SQLite相关的几个类:

1.  SQLiteOpenHelper 是Android提供的管理数据库的工具类,主要用于数据库的创建/打开和版本更新等。该类是一个抽象类,在使用时需要创建SQLite类的子类,并重写它的  onCreate() 和onUpdate() 方法(这两个方法是抽象的,必须扩展)。

在SQLiteOpenHelper类中包含的方法主要如下:

(1)public abstract void onCreate(SQLiteDatabase db);

当数据库第一次被创建时调用该方法,通常在该方法中执行初始化操作,如创建表结构,插入初始数据等。

(2)public abstract void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion);

数据库版本发生变化时调用该方法。

(3)public void onOpen(SQLiteDatabase db) {}

当数据库打开时调用该方法。

(4)public SQLiteDatabase getReadableDatabase();

以读写的方式打开数据库对应的SQLiteDatabase 对象,该方法内部调用 getWritableDatabase() 方法, 返回的对象与getWritableDatabase()对象返回的方法一致,当数据库磁盘空间满了时,通过getWritableDatabase() 方法打开数据库就会出错,但通过getReadableDatabase() 方法会尝试以只读的方式打开数据库。

(5)public SQLiteDatabase getWritableDatabase();

以写的方式打开数据库对应的SQLiteDatabase 对象,一旦打开成功,将会缓存该数据库对象。

当调用SQLiteOpenHelper 的getWritableDatabase() 或getReadableDatabase() 方法获取SQLite 实例时,系统会根据数据库名称来判断该数据库是否存在,如果数据库不存在,Android系统会自动生成一个数据库,然后回调onCreate方法,在onCreate()方法中执行建表语句及添加一些初始化数据。如果数据库存在,系统再根据数据库的版本号来判断是否需要更新,如果版本号与之前的不一致,则需要更新,系统自动调用onUpgrade() 方法,在该方法中根据需要执行数据表的结构及数据更新。

2. SQLiteDatabase 是Android提供的SQLite 数据库的封装类,该类封装了一些操作数据库的API,通过该类可以完成数据的添加(Create)/查询(Retrieve)/更新(Update)和删除(Delete) 操作,分别提供了insert(), query(), update(), delete() 方法。此外还有两个实用的方法:execSQL() 和rawQuery() 方法。execSQL() 方法可以执行insert/delete/update 和 create table 之类有更改行为的SQL语句,而rawQuery() 用于执行select 语句。原型分别如下:

//----------执行带占位符(占位符用?表示)的SQL语句,如果SQL语句中没有占位符,则第二个参数可传null。

execSQL(String sql, Object[] bindArgs);

//----------执行SQL语句

execSQL(String sql);

//----------执行带占位符的SQL查询。

rawQuery(String sql, String[] selectionArgs);

3. Cursor 接口主要用于存放查询记录的接口,Cursor 是结果集游标,用于对结果集进行随机访问。Cursor 提供了以下方法来移动查询结果的记录指针:

(1)move(int offset);//----------------将记录指针向上(offset为负)或向下(offset为正)移动指定行数;

(2)moveToNext();//------------------将游标从当前记录移动到下一条记录,如果已经移过了结果集的最后一条记录,返回false,否则返回true;

(3)moveToPrevious();//--------------将游标从当前记录移动到上一记录,如果已经移过了结果集的第一条记录,返回false,否则返回true;

(4)moveToFirst();//------------------将游标移动到结果集的第一条记录,如果结果集为空,返回false,否则返回true;

(5)moveToLast();//------------------将游标移动到结果集的最后一条记录,如果结果集为空,返回false,否则返回true;

使用SQLiteDatabase 进行数据库操作的步骤:

(1)创建数据库的辅助类对象,指定数据库的名称和版本号(继承抽象类SQLiteOpenHelper 并实现onCreate() 和 onUpgrade() );

(2)调用辅助类的getReadableDatabase() 或getWritabelDatabase()方法,获取SQLiteDatabase 对象,该对象代表了与数据库的连接;

(3)调用SQLiteDatabase对象的相关方法来执行增/删/查/改操作;

(4)对数据库操作的结果进行处理,例如判断是否插入/删除或者更新成功,将查询结果记录转换成列表显示等;

(5)关闭数据库连接,回收资源。

SQLite 数据库的更多相关文章

  1. Android之SQLite数据库篇

    一.SQLite简介 Google为Andriod的较大的数据处理提供了SQLite,他在数据存储.管理.维护等各方面都相当出色,功能也非常的强大. 二.SQLite的特点 1.轻量级使用 SQLit ...

  2. Qt5 开发 iOS 应用之访问 SQLite 数据库

    开发环境: macOS 10.12.1 Xcode 8.1 Qt 5.8 iPhone 6S+iOS 10.1.1   源代码: 我在 Qt 程序里指定了数据库的名称来创建数据库,在 Win10.An ...

  3. 【Win 10 应用开发】Sqlite 数据库的简单用法

    如果老周没记错的话,园子里曾经有朋友写过如何在 UWP 项目中使用 Sqlite数据库的文章.目前我们都是使用第三方封装的库,将来,SDK会加入对 Sqlite 的支持. 尽管目前 UWP-RT 库中 ...

  4. Android之SQLite数据库使用

    转载整理于:http://my.csdn.net/lmj623565791 我刚开始接触Android的时候甚至都不敢相信,Android系统竟然是内置了数据库的!好吧,是我太孤陋寡闻了.由于我之前是 ...

  5. 让PDF.NET支持最新的SQLite数据库

    最近项目中用到了SQLite,之前项目中用的是PDF.NET+MySQL的组合,已经写了不少代码,如果能把写好的代码直接用在SQLite上就好了,PDF.NET支持大部分主流的数据库,这个当然可以,只 ...

  6. iOS sqlite数据库图像化查看

    问题描述:在xocde上用sqlite数据库的时候,因为没有图形化界面,有些时候很难看出自己设计的数据库是否有问题,比如我刚上手sqlite数据库设计id为自增长时,很自然的用了identify(1, ...

  7. Android中SQLite数据库小计

    2016-03-16 Android数据库支持 本文节选并翻译<Enterprise Android - Programing Android Database Applications for ...

  8. Android开发-之SQLite数据库

    之前我们讲了如何将数据存储在文件中,那么除了这种方式呢,就是我们常见的大家都知道的将数据存储在数据库当中了. 将数据存储在数据库中的优势: 1)存储在数据库中的数据更加方便操作,比如增.删.改.查等 ...

  9. Java操作Sqlite数据库-jdbc连接

    Java操作Sqlite数据库步骤: 1. 导入Sqlite jdbc 本文使用sqlite-jdbc-3.7.2.jar,下载地址 http://pan.baidu.com/s/1kVHAGdD 2 ...

  10. Android开发学习——SQLite数据库与单元测试

    SQLite数据库 轻量级关系型数据库 创建数据库需要使用的api:SQLiteOpenHelper  public class Myopenhelper extends SQLiteOpenHelp ...

随机推荐

  1. [Hadoop] - Protocol Buffer安装

    Hadoop从2.x版本开始,底层的RPC远程调用使用ProtocolBuffer格式来传递数据,所以在编译Hadoop的过程中有可能出现提示缺少Protocol服务的异常信息,类似:'protoc ...

  2. [.NET] RabbitMQ 的行为艺术

    RabbitMQ 的行为艺术 序 好像,今天已经是 2 月 28 号了. 听说,29.30.31 号放假. 据说,有图,有真相. 目录 简介 环境搭建 示例一:简单的 Hello World 示例二: ...

  3. ios 相机调用之读取相册

    UIIamgePickerControllerr可以从照片库中读取一张图片到咱们应用程序中来   步骤:   //创建图片判断图片库是否可以使用   if([UIImagePickerControll ...

  4. 每日java基础知识(01)

    1.java语言的主要特点. 跨平台性:一个应用可以不经过修改,就直接在不同的平台上运行. 面向对象:java是面向对象的语言,可以使用对象封装事物的属性和行为,可以使用面向对象的思想进行分析设计,并 ...

  5. smarty模板基础2

    Smarty自带了一些内置函数,这些内置函数是Smarty模板引擎的组成部分.他们被编译成相应的内嵌PHP代码,以获得最大性能. 您创建的自定义函数不能与内置函数同名,也不必修改这些内置函数. 其中一 ...

  6. RxSwift 入坑好多天 - 终于有了一点理解

    一.前言 江湖上都在说现在就要赶紧学 swift 了,即将是 swift 的天下了.在 api 变化不大的情况下,swift 作为一门新的语言,集众家之所长,普通编码确实比 oc 要好用的多了 老早就 ...

  7. 学习PHP一个月的感受

    学习PHP将近一个月了,接触IT这个行业也是从去年开始的,在这之前,IT行业只是耳闻,并不是很了解.接触IT这个行业以后,我最大的感受是,学起来并不是很困难,难的是要去精通它,我们必须时刻保持一颗学徒 ...

  8. 基于 Koa平台Node.js开发的KoaHub.js的模板引擎代码

    koahub-handlebars koahub-handlebars koahub handlebars templates Installation $ npm install koahub-ha ...

  9. 算法模板——LCA(最近公共祖先)

    实现的功能如下——在一个N个点的无环图中,共有N-1条边,M个访问中每次询问两个点的距离 原理——既然N个点,N-1条边,则说明这是一棵树,而且联通.所以以1为根节点DFS建树,然后通过求两点的LCA ...

  10. 通讯录--(iOS9独有的方法)

    导入库文件   #import <ContactsUI/ContactsUI.h> #pragma mark iOS9 新出的点击通讯录的获取信息的办法 #pragma mark - 先弹 ...