日期:2014-05-16  浏览次数:20521 次

嵌入数据库SQLite(3) - Android

 

 

5.3 Android对SQLite的支持

Android 在运行时(run-time)集成了 SQLite,所以每个 Android 应用程序都可以使用 SQLite 数据库。对于熟悉 SQL 的开发人员来时,在 Android 开发中使用 SQLite 相当简单。但是,由于 JDBC 会消耗太多的系统资源,所以 JDBC 对于手机这种内存受限设备来说并不合适。因此,Android 提供了一些新的 API 来使用 SQLite 数据库,Android 开发中,程序员需要学会使用这些 API。

每个版本的Android SDK又有一些区别。

因为外键在大部分系统使用比较多,但是SQLite在3.6.19版本中才开始支持外键约束。而且默认是关闭的。如果要启用该功能 需要使用如下语句:

PRAGMA foreign_keys = ON

 

在Android 2.1以前的版本使用的SQLite版本是3.5.9, 在2.2版本中使用的是3.6.22.

可以通过如下命令查看SQLite的版本:

(路径:%ANDROID_SDK%\tools)

sqlite3 -version

 

注意:数据库存储在DATA/data/APP_NAME/databases/FILENAME。

 DATA is the path which theEnvironment.getDataDirectory() method returns. APP_NAME is your applicationname. FILENAME is the name you specifyin your application code for the database.

 

包android.database.sqlite内包含了所有的android对sqlite的操作。

 

 

 

 

5.3.0 数据库的创建或升级

在你的Android应用程序要创建和升级数据库需要使用子类SQLiteOpenHelper。在你的子类的构造函数中调用super()方法的SQLiteOpenHelper,指定数据库名称和当前数据库版本。

 

在这个类中,你需要重写onCreate()和onUpgrade()方法。

 

onCreate()中调用的架构,如果数据库不存在。

 

onUpgrade()被调用时,如果数据库版本增加了应用程序代码。这种方法允许你来更新数据库大纲。

 

这两种方法都接受一个SQLiteDatabase对象作为参数,它代表了数据库。

 

SQLiteOpenHelper提供的方法getReadableDatabase()和getWriteableDatabase()来获得一个SQLiteDatabase对象,无论是在读取或写入模式。

 

数据库表的主键的表中使用的标识符_id。几个版本的Android功能依赖于这个标准。

 

这是最好的做法是每个表创建单独的类。这个类定义静态的onCreate()和onUpdate()方法。这些方法被调用相应的方法SQLiteOpenHelper。这样实现的SQLiteOpenHelper将保持可读的,即使你有几个表。

 

请看实现步骤:

1. 新建一新类(继承SQLiteOpenHelper):

 

注意,图中红圈部分是勾选上的。默认是没有勾选的。

 

生成代码如下:

package com.example.sqlite;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class SQLiteOperDB extends SQLiteOpenHelper {

	public SQLiteOperDB(Context context, String name, CursorFactory factory,
			int version) {
		super(context, name, factory, version);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		// TODO Auto-generated method stub

	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		// TODO Auto-generated method stub

	}

}

 

5.3.1 数据库DDL操作

在Android中进行数据库的操作主要是通过继承SQLiteOpenHelper 来实现的。

其构造方法实现了数据库的创建或打开操作。其参数说明如下:

1)  Context context上下文环境(例如,一个 Activity)

2)  String name 数据库名字

3)  CursorFactoryfactory 一个可选的游标工厂(通常是 Null)

4)  int version 一个代表你正在使用的数据库模型版本的整数

 

其余的两个方法可用可不用,根据实际情况而定!

1.       onCreate()方法

创建或打开时触发的事件

1)  SQLiteDatabase db

   根据SQLiteDatabase对象填充表和初始化数据

2.       onUpgrage() 方法

数据库升级时触发的事件

1)  SQLiteDatabase db

要升级的数据库

2)  int oldVersion

老版本(整数)

3)  int newVersion

新版本(整数)

   

示例代码如下:

 

SQLiteOperDB.java

package com.example.sqlite;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class SQLiteOperDB extends