在Android平台上,集成了一个嵌入式关系型数据库—SQLite,SQLite3支持 NULL、INTEGER、REAL(浮点数字)、TEXT(字符串文本)和BLOB(二进制对象)数据类型,虽然它支持的类型只有五种,但实际上sqlite3也接受varchar(n)、char(n)、decimal(p,s) 等数据类型,只不过在运算或保存时会转成对应的五种数据类型。 SQLite最大的特点是你可以把各种类型的数据保存到任何字段中,而不用关心字段声明的数据类型是什么。SQLite可以解析大部分标准SQL语句。

例如:可以在Integer类型的字段中存放字符串,或者在布尔型字段中存放浮点数,或者在字符型字段中存放日期型值。 但有一种情况例外:定义为INTEGER PRIMARY KEY的字段只能存储64位整数, 当向这种字段保存除整数以外的数据时,将会产生错误。 另外, SQLite 在解析CREATE TABLE 语句时,会忽略 CREATETABLE 语句中跟在字段名后面的数据类型信息,如下面语句会忽略 name字段的类型信息:

CREATE TABLE person (personid integerprimary key autoincrement, name varchar(20))

比如我们创建一个保存个人信息的数据库。首先我们要创建一个类继承SQLiteOpenHelper.如下图:


其构造方法中的四个构造参数的含义如下:

context:上下文

name:数据库文件名

factory:游标(cursor)对象,即结果集指针。可以为null,为null时将使用系统默认的游标对象。

Version:数据库的版本号,其数值必须大于等于1,否则会抛出异常。

在super中设置各参数:

super(context,”person.db”,null,1);

上图中onCreate(SQLiteDatabase db)方法在数据库第一次被创建时调用,用于初次使用软件时生成数据库表,可以指定数据库的表结构、写入数据等。onUpgrade(SQLiteDatabase db, intoldVersion, int newVersion)方法则用于升级软件时更新数据库表结构。

我们使用onCreate(SQLiteDatabase db)方法初始化数据库的表结构。如下图:



到了这里,必要的信息已经配置完毕了,但是此时数据库还没有被创建。接下来就可以在必要的地方调用这个类了。调用该类并创建数据库方法如下:



   此时在程序包内会自动创建一个名为databases的文件夹,我们创建的数据库文件就是文件夹内名为person.db的文件。

getWritableDatabase()和getReadableDatabase()方法都可以获取一个用于操作数据库的SQLiteDatabase实例。但getWritableDatabase() 方法以读写方式打开数据库,一旦数据库的磁盘空间满了,数据库就只能读而不能写,倘若使用getWritableDatabase()打开数据库就会出错。getReadableDatabase()方法先以读写方式打开数据库,如果数据库的磁盘空间满了,就会打开失败,当打开失败后会继续尝试以只读方式打开数据库。