Android中通过SQLite数据库引擎来实现结构化数据存储。SQLite是一个嵌入式数据库引擎,针对内存等资源有限的设备(如手机、PDA、MP3)提供的一种高效的数据库引擎。
SQLite数据库不像其他的数据库(如Oracle),它没有服务器进程。所有的内容包含在同一个单文件中。该文件是跨平台的,可以自由复制。基于其自身的先天优势,SQLite在嵌入式领域得到广泛应用。
SQLite最大的特点是你可以把各种类型的数据保存到任何字段中,而不用关心字段声明的数据类型是什么。
但如何利用SQLite来开发数据库应用呢?我们如何才能实现在用户初次使用或升级软件时自动在用户的手机上创建出应用需要的数据库表呢?为了解决这一问题,在Android系统,为我们提供了一个名为SQLiteOpenHelper的抽象类,必须继承它才能使用。
SQLiteOpenHelper类提供了两个重要的方法,分别是onCreate(SQLiteDatabase db)和onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion),前者用于初次使用软件时生成数据库表,后者用于升级软件时更新数据库表结构。当调用SQLiteOpenHelper的getWritableDatabase()或者getReadableDatabase()方法获取用于操作数据库的SQLiteDatabase实例的时候,如果数据库不存在,Android系统会自动生成一个数据库,接着调用onCreate()方法,onCreate()方法在初次生成数据库时才会被调用,在onCreate()方法里可以生成数据库表结构及添加一些应用使用到的初始化数据。onUpgrade()方法在数据库的版本发生变化时会被调用,一般在软件升级时才需改变版本号,而数据库的版本是由程序员控制的,假设数据库现在的版本是1,由于业务的变更,修改了数据库表结构,这时候就需要升级软件,升级软件时希望更新用户手机里的数据库表结构,为了实现这一目的,可以把原来的数据库版本设置为2。
下面就以个人日记本为例来更好地学习SQLite...
首先展示一下层次结构,项目的命名、包及其类的命名:
阶段一:新建Android项目,命名为MyDiary .然后使用SQLiteOpenHelper(抽象类)来完成数据库的创建.新建DBHelper类,让它继承SQLiteOpenHelper类,具体代码如下:
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
public class DBHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "diary.db";
private static final int DATABASE_VERSION = 1;
public DBHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table diary(_id integer primary key autoincrement,title varchar(20),content varchar(1000),pubdate)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
阶段二:配置好单元测试的环境:
<uses-library android:name="android.test.runner" />
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.lks.mydiary" >
</instrumentation>
然后进行单元测试:看数据库究竟有没有被创建出来..
package com.lks.mydiary.test;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.lks.mydiary.entity.Diary;
import com.lks.mydiary.service.DBHelper;
import com.lks.mydiary.service.DiaryService;
import android.test.AndroidTestCase;
public class DiaryServiceTest extends AndroidTestCase {
public void testOncreate() {
DBHelper dbHelper = new DBHelper(getContext());
dbHelper.getWritableDatabase();
}
}
执行单元测试,创建好的数据库是以文件的形式进行存放的...
进入DDMS观察存放位置:data/data/应用的包名/databases/diary.db
如何观察数据库中建立的表呢?