安卓开发中常用的数据库是 SQLite(轻量级关系型数据库),此外谷歌还提供了 Room 持久化库(基于 SQLite 的抽象层),不同数据库的开发位置如下:
数据库类型 | 开发位置 | 核心操作类/接口 |
---|---|---|
SQLite | 代码中(Java/Kotlin 文件) | SQLiteDatabase SQLiteOpenHelper |
Room | 代码中(Java/Kotlin 文件) | RoomDatabase Dao 接口 |
安卓应用的数据库文件默认存储在应用安装目录下的 /databases/
文件夹中,具体路径为:
/data/data/<应用包名>/databases/<数据库名称>.db
Device File Explorer
或命令行工具(如 adb pull
)导出数据库文件。SQLite 开发流程:
SQLiteOpenHelper
子类,定义数据库创建与升级逻辑。onCreate()
方法中执行 SQLiteDatabase.execSQL()
创建表。SQLiteDatabase
对象执行增删改查操作。Room 开发流程:
@Entity
实体类(对应数据库表)。@Dao
接口(定义数据库操作方法)。RoomDatabase
类,封装数据库实例。Room.databaseBuilder()
构建数据库对象。问题 1:如何查看应用内 SQLite 数据库的内容?
Device File Explorer
导出 /databases/
目录下的 .db
文件。 adb shell "sqlite3 /data/data/<包名>/databases/<数据库名>.db"
问题 2:Room 与 SQLite 直接操作的区别是什么?
// 1. 定义实体类 @Entity(tableName = "user") data class User( @PrimaryKey(autoGenerate = true) val id: Int, val name: String, val age: Int ) // 2. 定义 Dao 接口 @Dao interface UserDao { @Insert(onConflict = OnConflictStrategy.REPLACE) fun insert(user: User) @Query("SELECT FROM user") fun getAllUsers(): LiveData<List<User>> } // 3. 创建数据库类 @Database(entities = [User::class], version = 1) abstract class AppDatabase : RoomDatabase() { abstract fun userDao(): UserDao } // 4. 获取数据库实例(通常在 Application 类中) val db = Room.databaseBuilder( context, AppDatabase::class.java, "app-database" ).build()