当前位置:首页 > 行业动态 > 正文

安卓开发打开数据库的方法

安卓开发中打开数据库的实现方法

通过 SQLiteOpenHelper 创建与打开数据库

安卓推荐使用 SQLiteOpenHelper 辅助类管理数据库,其核心逻辑包括:

  1. 定义数据库结构:指定数据库名称、版本号。
  2. 创建/升级数据库:通过重写 onCreate()onUpgrade() 方法。
  3. 获取数据库实例:调用 getReadableDatabase()getWritableDatabase()

代码示例

public class MyDatabaseHelper extends SQLiteOpenHelper {
    private static final String DATABASE_NAME = "app_data.db"; // 数据库名称
    private static final int DATABASE_VERSION = 1;            // 版本号
    // 构造函数(建议用单例模式)
    public MyDatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
    // 首次创建数据库时调用
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)");
    }
    // 数据库版本升级时调用
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS users");
        onCreate(db);
    }
}

打开数据库

安卓开发打开数据库的方法  第1张

MyDatabaseHelper dbHelper = new MyDatabaseHelper(context);
SQLiteDatabase db = dbHelper.getWritableDatabase(); // 可读写(支持增删改)
// 或
SQLiteDatabase db = dbHelper.getReadableDatabase(); // 只读(查询)

关键方法对比

方法 作用 适用场景
getReadableDatabase 获取只读数据库实例 仅执行查询操作
getWritableDatabase 获取可读写数据库实例 增删改操作
close() 关闭数据库连接 Activity/Fragment销毁时

注意事项

  1. 单例模式:避免多次创建 SQLiteOpenHelper 实例,导致资源浪费。

    private static MyDatabaseHelper instance;
    public static MyDatabaseHelper getInstance(Context context) {
        if (instance == null) {
            instance = new MyDatabaseHelper(context.getApplicationContext());
        }
        return instance;
    }
  2. 线程安全:数据库操作需在子线程执行,UI线程直接操作会抛出异常。

    new Thread(() -> {
        SQLiteDatabase db = dbHelper.getWritableDatabase();
        // 执行CRUD操作
        db.close();
    }).start();
  3. 生命周期管理:确保在 onDestroy() 中关闭数据库,防止内存泄漏。

    @Override
    protected void onDestroy() {
        super.onDestroy();
        dbHelper.close();
    }

常见问题与解决方案

问题 解决方案
数据库表未创建 确保调用了 getWritableDatabase()getReadableDatabase() 触发 onCreate()
多线程冲突 使用事务(beginTransaction())或同步锁(synchronized)保证操作原子性
版本升级失败 onUpgrade() 中处理数据迁移逻辑(如备份旧表、修改表结构)

相关问题与解答

问题1:如何实现数据库版本升级?

解答
onUpgrade() 方法中处理数据迁移逻辑。

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    if (oldVersion < 2) {
        db.execSQL("ALTER TABLE users ADD COLUMN age INTEGER"); // 新增字段
    }
}

问题2:如何在多线程中安全操作数据库?

解答

  1. 事务管理:使用 db.beginTransaction()db.setTransactionSuccessful() 确保操作原子性。
  2. 同步锁:对数据库操作代码块添加 synchronized 关键字,避免并发冲突
0