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

安卓开发创建数据库怎么使用

安卓创建数据库需引入Room库,定义实体类,创建DAO接口,继承RoomDatabase并调用build()构建

Android数据库类型选择

数据库类型 适用场景 特点
SQLite 轻量级本地存储 关系型数据库,支持SQL语法,适合结构化数据
Room 现代化数据库访问层 基于SQLite,提供抽象层,编译时验证,支持LiveData
Realm 高性能本地数据库 面向对象数据库,适合复杂数据结构(需引入第三方库)

SQLite数据库创建与使用

创建数据库帮助类

public class MyDatabaseHelper extends SQLiteOpenHelper {
    private static final String DATABASE_NAME = "app.db";
    private static final int VERSION = 1;
    public MyDatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, VERSION);
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        // 创建表结构
        String sql = "CREATE TABLE user(id INTEGER PRIMARY KEY,name TEXT)";
        db.execSQL(sql);
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // 数据库升级处理
        db.execSQL("DROP TABLE IF EXISTS user");
        onCreate(db);
    }
}

数据库操作方法

操作类型 实现方式 示例代码
插入数据 insert() db.insert("user", null, contentValues)
更新数据 update() db.update("user", cv, "id=?", new String[]{id})
删除数据 delete() db.delete("user", "id=?", new String[]{id})
查询数据 query() db.query("user", null, "id=?", args, null, null, null)

使用注意事项

  • 线程安全:数据库操作必须在子线程执行
  • 版本管理:升级VERSION时需处理数据迁移
  • 资源释放:使用完毕后调用db.close()

Room持久化库使用

定义实体类

@Entity(tableName = "user")
public class User {
    @PrimaryKey(autoGenerate = true)
    public int id;
    @ColumnInfo(name = "name")
    public String name;
}

创建DAO接口

@Dao
public interface UserDao {
    @Insert
    void insertUser(User... users);
    @Query("SELECT  FROM user WHERE id = :userId")
    User getUserById(int userId);
    @Update
    void updateUser(User user);
    @Delete
    void deleteUser(User user);
}

构建数据库对象

@Database(entities = {User.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
    public abstract UserDao userDao();
}

使用示例

AppDatabase db = Room.databaseBuilder(context, AppDatabase.class,"app.db").build();
User user = new User();
db.userDao().insertUser(user);

数据库操作对比表

特性 SQLite Room
编译时检查 支持
接口复杂度 需要手写SQL 面向对象操作
线程管理 需自行处理 支持RxJava/LiveData
迁移支持 手动实现 内置MigrationStrategy
空数据处理 需判断Cursor是否为空 返回Optional/LiveData

常见问题与解决方案

数据库文件存储位置

存储方式 路径格式 特点
内部存储 /data/data/包名/databases/ 无需申请权限,自动备份
外部存储 /storage/emulated/0/ 需要运行时权限,可共享数据

数据库加密方案

方案 实现方式 安全性等级
SQLCipher 集成加密库 中等(AES加密)
Android Keystore 系统密钥存储 高(硬件级密钥保护)
自定义加密 结合AES+密钥管理 依赖实现质量

相关问题解答

Q1:SQLite和Room应该如何选择?

安卓开发创建数据库怎么使用  第1张

  • SQLite:适合简单项目或需要完全控制SQL的场景,学习曲线平缓
  • Room:推荐新项目使用,优势包括编译时验证、类型安全、内置架构迁移支持,特别适合MVVM架构

Q2:如何处理多线程并发访问数据库?

  • Room方案:使用allowMainThreadQueries()(仅限调试)、AsyncTaskLiveDataRxJava处理异步操作
  • SQLite方案:使用ContentProvider封装访问,或配合ThreadPoolExecutor进行线程管理
0