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);