在Android开发中,数据库是存储结构化数据的重要工具,SQLite作为一种轻量级嵌入式数据库,被广泛应用于Android应用的数据持久化需求,本文将详细介绍如何在Android中创建和管理数据库,包括核心类、实现步骤及最佳实践。

核心类与工具
Android提供了SQLiteOpenHelper抽象类来简化数据库的创建和版本管理,开发者只需继承此类并实现两个核心方法:onCreate()和onUpgrade()。onCreate()在数据库首次创建时调用,用于初始化表结构;onUpgrade()在数据库版本升级时调用,用于处理表结构变更。SQLiteDatabase类提供了执行SQL语句(如增删改查)的方法,是操作数据库的直接接口。
数据库创建步骤
创建SQLiteOpenHelper子类
继承SQLiteOpenHelper并实现必要方法,创建一个MyDatabaseHelper类:
public class MyDatabaseHelper extends SQLiteOpenHelper {
// 数据库基本信息
private static final String DATABASE_NAME = "user.db";
private static final int DATABASE_VERSION = 1;
// 表结构定义
private static final String TABLE_CREATE =
"CREATE TABLE users (" +
"id INTEGER PRIMARY KEY AUTOINCREMENT, " +
"name TEXT NOT NULL, " +
"age INTEGER, " +
"email TEXT UNIQUE);";
public MyDatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(TABLE_CREATE); // 执行建表SQL
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// 示例:版本升级时删除旧表并重建(实际开发中需谨慎处理数据迁移)
db.execSQL("DROP TABLE IF EXISTS users");
onCreate(db);
}
} 初始化数据库实例
在Activity或其他组件中,通过Context获取MyDatabaseHelper实例,调用getWritableDatabase()或getReadableDatabase()方法会自动触发数据库的创建或打开:

MyDatabaseHelper dbHelper = new MyDatabaseHelper(this); SQLiteDatabase db = dbHelper.getWritableDatabase(); // 获取可写数据库
执行数据库操作
创建表后,可通过SQLiteDatabase的方法进行数据操作,例如插入数据:
ContentValues values = new ContentValues();
values.put("name", "张三");
values.put("age", 25);
values.put("email", "zhangsan@example.com");
long newRowId = db.insert("users", null, values); // 返回新插入行的ID 最佳实践与注意事项
- 线程安全:数据库操作应在子线程中执行,避免阻塞UI线程,可使用
AsyncTask、ThreadPool或Room库的异步支持。 - 版本管理:通过修改
DATABASE_VERSION触发onUpgrade(),避免直接操作数据库文件,升级时需保留旧数据,例如通过备份表再重建的方式。 - 性能优化:对频繁查询的字段建立索引,使用事务(
beginTransaction()/setTransactionSuccessful()/endTransaction())批量插入数据,减少IO操作。 - 安全性:避免SQL注入,优先使用
ContentValues或query()方法的参数化查询,而非直接拼接SQL字符串。
相关问答FAQs
Q1: 为什么推荐使用Room库而非直接使用SQLiteOpenHelper?
A: Room是Google官方提供的ORM库,它通过注解简化数据库操作,编译时检查SQL语句正确性,并自动处理线程安全,相比直接使用SQLiteOpenHelper,Room减少了样板代码,提供了更友好的API,并支持LiveData等架构组件,更适合现代Android开发。
Q2: 数据库升级时如何保留旧数据?
A: 在onUpgrade()方法中,可通过以下步骤实现数据迁移:

- 创建临时表存储旧数据:
db.execSQL("CREATE TABLE temp_users AS SELECT * FROM users"); - 删除旧表并重建新表:
db.execSQL("DROP TABLE users"); onCreate(db); - 将数据从临时表复制回新表:
db.execSQL("INSERT INTO users SELECT * FROM temp_users"); - 删除临时表:
db.execSQL("DROP TABLE temp_users");
对于复杂迁移,建议使用Room的Migration类,它提供了更灵活的数据迁移方案。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复