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

安卓建立数据库步骤

安卓建立数据库步骤详解

创建数据库辅助类(SQLiteOpenHelper)

在安卓中,通常通过继承 SQLiteOpenHelper 类来管理数据库的创建和版本更新,此类负责执行数据库的初始化(onCreate)和升级(onUpgrade)逻辑。

示例代码:

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) {
        // 创建表语句
        String createTable = "CREATE TABLE users (" +
                "id INTEGER PRIMARY KEY AUTOINCREMENT, " +
                "name TEXT, " +
                "age INTEGER)";
        db.execSQL(createTable); // 执行建表语句
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // 数据库升级逻辑(如表结构变更)
        db.execSQL("DROP TABLE IF EXISTS users"); // 删除旧表
        onCreate(db); // 重新创建新表
    }
}

定义数据模型类

数据模型类用于映射数据库表的字段,通常与数据库操作紧密结合。

示例代码:

public class User {
    private int id;
    private String name;
    private int age;
    // 构造方法、getter/setter 省略
}

数据库基本操作方法

通过 SQLiteDatabase 对象执行增删改查操作。

操作类型 方法示例 说明
插入数据 insert() 添加新记录
查询数据 query() 检索符合条件的数据
更新数据 update() 修改现有记录
删除数据 delete() 移除记录

示例代码(插入数据):

SQLiteDatabase db = helper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name", "Alice");
values.put("age", 25);
long rowId = db.insert("users", null, values); // 返回新插入行的ID

数据库版本管理

当数据库结构发生变化时(如新增字段),需更新 DATABASE_VERSION 并在 onUpgrade 方法中处理数据迁移。

版本升级流程:

  1. 增加 DATABASE_VERSION 值。
  2. onUpgrade 中执行表结构变更或数据迁移逻辑。
  3. 测试升级后兼容性。

使用 ContentProvider(可选)

若需跨应用共享数据,可通过 ContentProvider 暴露数据库接口。

作用:

  • 统一数据访问入口。
  • 支持多进程数据共享。
  • 提供Uri接口供其他应用调用。

使用 Room 持久化库(推荐)

Google 提供的 Room 库简化了数据库操作,支持编译时校验和流畅的API。

核心组件:

  • @Entity:定义表结构。
  • @Dao:定义数据操作接口。
  • Database:继承 RoomDatabase 并封装多个Dao。

示例代码:

// 定义实体类
@Entity(tableName = "users")
public class User {
    @PrimaryKey(autoGenerate = true)
    public int id;
    public String name;
    public int age;
}
// 定义Dao接口
@Dao
public interface UserDao {
    @Insert
    long insertUser(User user);
    @Query("SELECT  FROM users WHERE id = :userId")
    User getUserById(int userId);
}
// 创建数据库
@Database(entities = {User.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
    public abstract UserDao userDao();
}

对比表格:原生SQL vs Room库

特性 原生SQL Room库
代码安全性 易出错(字符串拼接) 编译时校验
开发效率 低(需手动写SQL) 高(注解生成代码)
抽象层次 底层操作 面向对象API
适用场景 简单需求 复杂业务、团队协作

相关问题与解答

问题1:如何安全地处理数据库版本升级?

解答:

  • onUpgrade 方法中,根据新旧版本差异执行迁移脚本(如 ALTER TABLE 添加字段)。
  • 若涉及复杂迁移,可拆分为多个版本(如从1→2→3),逐步执行变更。
  • 使用第三方库(如 SQLDelight)辅助生成迁移代码。

问题2:为什么推荐使用 Room 而非原生SQL?

解答:

  • 减少错误:Room 通过注解生成代码,避免手写SQL的拼写或语法错误。
  • 提高可读性:面向对象的API更符合开发习惯,降低学习成本。
  • 编译时检查:提前发现数据库与实体类的不匹配问题。
  • 支持LiveData:天然集成观察者模式,便于实现响应式编程
0