Android开源SQLite封装实现指南

简介

在Android开发中,使用SQLite数据库是非常常见的。为了简化开发过程和提高代码的可复用性,我们可以封装一套SQLite数据库操作类,方便快速地进行增删改查操作。本文将教你如何实现一个Android开源SQLite封装。

整体流程

首先,我们需要了解整个实现过程的流程。下面是一张展示步骤的表格:

步骤 描述
1 创建一个数据库帮助类
2 定义数据表的结构
3 实现数据库的打开和关闭
4 实现数据的增删改查操作

接下来,我们将详细介绍每一步需要做什么,并给出代码示例。

创建一个数据库帮助类

首先,我们需要创建一个数据库帮助类,继承自SQLiteOpenHelper。这个类用于创建和管理数据库,以及处理数据库的升级。

public class DBHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME = "my_database.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) {
        // 在这里创建数据表
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // 在这里处理数据库的升级
    }
}

在上面的代码中,我们定义了数据库的名称和版本号。在onCreate方法中,我们可以创建数据库中的数据表。在onUpgrade方法中,我们可以处理数据库的升级逻辑。

定义数据表的结构

接下来,我们需要定义数据表的结构,包括表名、列名、列的数据类型等。我们可以创建一个Contract类来统一管理数据表的定义。

public final class Contract {

    private Contract() {}

    public static class UserEntry implements BaseColumns {
        public static final String TABLE_NAME = "user";
        public static final String COLUMN_NAME_NAME = "name";
        public static final String COLUMN_NAME_AGE = "age";
    }
}

在上述代码中,我们定义了一个UserEntry内部类,继承自BaseColumns。这个内部类定义了用户表的结构,包括表名、列名等。

实现数据库的打开和关闭

在数据库帮助类中,我们需要实现数据库的打开和关闭操作。这两个方法分别在数据库需要使用时打开和不再使用时关闭。

public class DBHelper extends SQLiteOpenHelper {

    // ...

    private SQLiteDatabase mDatabase;

    @Override
    public void onOpen(SQLiteDatabase db) {
        super.onOpen(db);
        mDatabase = db;
        mDatabase.setForeignKeyConstraintsEnabled(true);
    }

    @Override
    public synchronized void close() {
        super.close();
        mDatabase = null;
    }
}

在上面的代码中,我们使用了onOpen方法获取了一个SQLiteDatabase实例,用于执行数据库操作。在close方法中,我们将这个实例置为null

实现数据的增删改查操作

最后,我们需要实现数据的增删改查操作。我们可以创建一个DataAccess类来处理这些操作。

public class DataAccess {

    private DBHelper mDBHelper;

    public DataAccess(Context context) {
        mDBHelper = new DBHelper(context);
    }

    public void insertUser(User user) {
        SQLiteDatabase db = mDBHelper.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(Contract.UserEntry.COLUMN_NAME_NAME, user.getName());
        values.put(Contract.UserEntry.COLUMN_NAME_AGE, user.getAge());
        db.insert(Contract.UserEntry.TABLE_NAME, null, values);
    }

    public void updateUser(User user) {
        SQLiteDatabase db = mDBHelper.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(Contract.UserEntry.COLUMN_NAME_AGE, user.getAge());
        String selection = Contract.UserEntry.COLUMN_NAME_NAME + " = ?";
        String[] selectionArgs = { user.getName() };
        db.update(Contract.UserEntry.TABLE_NAME, values, selection, selectionArgs);
    }

    public void deleteUser(String name) {
        SQLiteDatabase db = mDBHelper.getWritableDatabase();
        String selection = Contract.UserEntry.COLUMN_NAME_NAME + " = ?";
        String[] selectionArgs = { name };
        db.delete(Contract.UserEntry.TABLE_NAME, selection, selectionArgs);