下面我将为你详细讲解如何在 Android 中封装使用 SQLiteOpenHelper。
概述
SQLiteOpenHelper 是 Android 提供的一个 SQLite 数据库帮助类,它可以帮助我们创建数据库,并提供了升级、降级、数据迁移等功能。但是,SQLiteOpenHelper 并没有提供特别友好的 API,因此我们需要对其进行进一步的封装以提高开发效率。
本文将分两部分介绍 SQLiteOpenHelper 的封装使用,主要包括以下内容:
- 封装 SQLiteOpenHelper 类
- 对外提供简单的 API
封装 SQLiteOpenHelper 类
在封装 SQLiteOpenHelper 之前,需要对 SQLiteOpenHelper 本身有一个基本的了解。SQLiteOpenHelper 中主要有两个重要的方法:
- onCreate():在第一次创建数据库时调用,用来创建数据库表等对象。
- onUpgrade():在数据库需要升级时调用,用来更新数据库表等对象。
我们可以通过自定义一个类继承 SQLiteOpenHelper,来重写这两个方法。具体的类封装过程如下:
public class DBHelper extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 1;// 数据库的版本号
private static final String DATABASE_NAME = "mydb.db";// 数据库的名称
// 数据库表的名称和结构
private static final String TABLE_PERSON = "person";
private static final String COLUMN_ID = "id";
private static final String COLUMN_NAME = "name";
public DBHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
// 创建表格
db.execSQL("CREATE TABLE " + TABLE_PERSON + " (" +
COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
COLUMN_NAME + " TEXT NOT NULL);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// 升级表格
}
}
在这里,我们继承了 SQLiteOpenHelper 并将需要创建的数据库表格的名称和结构保存在了常量中。在 onCreate() 方法中,我们通过 db.execSQL() 来创建该表格,而在 onUpgrade() 方法中则可以实现该表格的升级操作。
除此之外,值得注意的是,在 SQLiteOpenHelper 的构造函数中,我们还需要传入两个参数:
- DATABASE_NAME:数据库的名称。
- DATABASE_VERSION:数据库的版本号。
在进行数据升级时,我们就需要通过比较数据库的版本号来判断是否需要进行升级。
提供对外 API
在封装了 DBHelper 类之后,我们需要在该类中再添加对外的 API,方便开发者调用。例如,我们可以定义一个方法来插入一条 Person 记录:
public class DBHelper extends SQLiteOpenHelper {
// ...
public void insertPerson(String name) {
SQLiteDatabase db = getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(COLUMN_NAME, name);
db.insert(TABLE_PERSON, null, cv);
db.close();
}
}
该方法中,我们首先获得了可写的 SQLiteDatabase 对象,然后构造了一条记录(即一个 ContentValues 对象),最后通过 SQLiteDatabase 的 insert() 来插入该记录。最后,我们还需要关闭 SQLiteDatabase 对象以释放资源。
除了插入记录外,我们还可以定义其他的 API 来完成数据的查询、更新、删除等操作,例如:
public class DBHelper extends SQLiteOpenHelper {
// ...
public List<Person> selectAllPerson() {
SQLiteDatabase db = getReadableDatabase();
Cursor cursor = db.query(TABLE_PERSON, null, null, null, null, null, null);
List<Person> personList = new ArrayList<>();
while (cursor.moveToNext()) {
int id = cursor.getInt(cursor.getColumnIndex(COLUMN_ID));
String name = cursor.getString(cursor.getColumnIndex(COLUMN_NAME));
Person person = new Person(id, name);
personList.add(person);
}
cursor.close();
db.close();
return personList;
}
public void updatePerson(int id, String name) {
SQLiteDatabase db = getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(COLUMN_NAME, name);
String whereClause = COLUMN_ID + "=?";
String[] whereArgs = new String[]{String.valueOf(id)};
db.update(TABLE_PERSON, cv, whereClause, whereArgs);
db.close();
}
public void deletePerson(int id) {
SQLiteDatabase db = getWritableDatabase();
String whereClause = COLUMN_ID + "=?";
String[] whereArgs = new String[]{String.valueOf(id)};
db.delete(TABLE_PERSON, whereClause, whereArgs);
db.close();
}
}
在这里,我们分别实现了查询所有 Person 记录、更新 Person 记录和删除 Person 记录的 API。通过这些 API,我们可以方便地完成对数据库的操作。
示例说明
下面举两个示例说明该封装使用方法:
示例一:插入一条 Person 记录
DBHelper dbHelper = new DBHelper(context);
dbHelper.insertPerson("Tom");
在这里,我们首先创建了 DBHelper 对象,然后调用了 insertPerson() 方法来插入一条 Person 记录。
示例二:查询所有 Person 记录
DBHelper dbHelper = new DBHelper(context);
List<Person> personList = dbHelper.selectAllPerson();
在这里,我们首先创建了 DBHelper 对象,然后调用了 selectAllPerson() 方法来查询所有 Person 记录,并将结果保存在一个 List
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:android 中 SQLiteOpenHelper的封装使用详解 - Python技术站