SQLite数据库简介

SQLite是一款非常轻量级的关系型数据库系统,支持多数SQL92标准。

SQLite在使用前不需要安装设置,不需要进程来启动、停止或配置,而其他大多数SQL数据库引擎是作为一个单独的服务器进程,被程序使用某种内部进程通信(典型的是TCP/IP),完成发送请求到服务器和接收查询结果的工作,SQLite不采用这 种工作方式。使用SQLite时,访问数据库的程序直接从磁盘上的数据库文件读写,没有中间的服务器进程。

SQLite的主要应用场景有作为手机应用的数据库以及小型桌面软件的数据库。(目前,市面上流行的三款移动端操作系统(Android、iOS、WindowsPhone)都是使用SQLite数据库)。

Android系统内置有SQLite数据库。

SQLite小知识

SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月。 至2016年已经有16个年头,SQLite也迎来了一个版本 SQLite 3已经发布。

SQLite将数据值的存储划分为以下几种存储类型:

NULL  空值。

INTEGER  有符号整数,存储整型数据。

REAL  浮点数,存储为8字节的双精度浮点数。

TEXT  文本串,使用数据库编码(UTF-8、UTF-16BE或UTF-16LE)存储。

BLOB  存储Blob数据,该类型数据和输入数据完全相同。(二进制数据,如:声音、音频、图像等)


2. 注意事项:

1. SQLite最大的特点是可以保存任何类型的数据到任何字段中,并且无论这列声明的数据类型是什么。

例如:可以在Integer字段中存放字符串,或者在布尔型字段中存放浮点数,或者在字符型字段中存放日期型值。

2. 有一种情况例外,即定义为INTEGER PRIMARY KEY的字段只能存储64位整数。

 当向定义为INTEGER PRIMARY KEY的字段中保存除整数以外的数据时,将会产生错误。

3. SQLite在解析CREATE TABLE 语句时,会忽略 CREATE TABLE 语句中跟在字段名后面的数据类型信息,如下面语句会忽略name字段的类型信息:

CREATE TABLE person (personid integer primary key autoincrement, name varchar(20));

SQLiteDataBase类

Android提供了一个名为SQLiteDatabase的类,该类封装了一些操作数据库的API。一旦应用程序获得了代表指定数据库的SqliteDatabase对象,接下来就可通过SqliteDatabase对象来管理、操作数据库了。

创建数据库和表

1. 创建数据库,并获得SqliteDataBase对象。调用SqliteDataBase类的静态方法,可以获得一个数据库对象。

SqliteDataBase. db = SQLiteDatabase.openOrCreateDatabase(path, factory);//打开或创建(如果不存在)

注意:

1)参数一是指文件路径,如果指定的数据文件存在则打开,不存在则创建;(可以写成getFilesDir()+文件名.db);

2参数二是指的CursorFactory,传入null则代表使用默认的CursorFactory,一般情况下直接传入null就可以满足需求了

Cursor知识

当执行查询语句的时候,需要调用SQLiteDatabase的rawQuery()方法,此时返回值是一个Cursor对象,这里的Cursor类似于JDBC中的ResultSet。(游标)

Cursor也提供了一些方法来移动查询结果的记录指针,方法如下:

move(int offset)  将指针向上或向下移动指定的行数。Offset正数就是向下,负数就是向上

moveToFirst()  移动到第一行,移动成功则返回true

moveToLast()  移动到最后一行,移动成功则返回true;

moveToNext()  移动到下一行,移动成功则返回true;

moveToPostion(position)  移动到指定的行,,移动成功则返回true;

moveToPrevious()  向上移动一行,移动成功则返回true。

一旦将记录指针移动到指定行会后,接下来就可以调用Cursor对象的getXxx()方法来获得该行记录的数据了。

下面我们来使用SQL语句去查询数据内容。