Android数据库框架Room使用示例

Android示例项目集合
2022-06-20 17:05 · 阅读时长5分钟
小课

在Android开发中,经常会用到SQLite数据库来存储数据,Room是Google推出的一个SQLite数据库封装库,主要用于简化SQLite的使用。

下面就介绍一下Room库的基础使用步骤,首先需要在gradle中添加Room依赖,room版本选择可以参考AndroidX 版本

implementation "androidx.room:room-runtime:$room_version"
kapt "androidx.room:room-compiler:$room_version"
implementation "androidx.room:room-ktx:$room_version"

Room库主要包括三种组件,数据实体(Entity)、数据访问类(DAO)和数据库类(Database)。

加载中...
一、数据实体

Room使用注解@Entity来标识数据实体,对应数据库中的一张表,@Entity中有很多参数可以指定,比如说tableName、indices等。使用@PrimaryKey来标识主键,使用@ColumnInfo来自定义字段。

1@Entity
2data class Item(
3   @PrimaryKey(autoGenerate = true)
4   val id: Int = 0,
5   @ColumnInfo(name = "name")
6   val itemName: String,
7   @ColumnInfo(name = "price")
8   val itemPrice: Double,
9   @ColumnInfo(name = "quantity")
10   val quantityInStock: Int
11)
二、数据访问对象 (DAO)

Room使用注解@Dao来标识数据访问对象,在Dao中可以定义一些方法,用于提供数据库增@Insert、删@Delete、改@Update、查@Query的功能。

1@Dao
2interface ItemDao {
3
4    @Query("SELECT * from item ORDER BY name ASC")
5    fun getItems(): Flow<List<Item>>
6
7    @Query("SELECT * from item WHERE id = :id")
8    fun getItem(id: Int): Flow<Item>
9
10    @Insert(onConflict = OnConflictStrategy.IGNORE)
11    suspend fun insert(item: Item)
12
13    @Update
14    suspend fun update(item: Item)
15
16    @Delete
17    suspend fun delete(item: Item)
18}
三、数据库类(Database)

Room使用注解@Database来标识数据库类,在@Database注解中,需要指定使用的数据实体类和数据访问对象,然后通过这些生成对应的数据库表和数据库增删改查操作的实现。

1@Database(entities = [Item::class], version = 1, exportSchema = false)
2abstract class ItemRoomDatabase : RoomDatabase() {
3
4   abstract fun itemDao(): ItemDao
5
6   companion object {
7       @Volatile
8       private var INSTANCE: ItemRoomDatabase? = null
9
10       fun getDatabase(context: Context): ItemRoomDatabase {
11           return INSTANCE ?: synchronized(this) {
12               val instance = Room.databaseBuilder(
13                   context.applicationContext,
14                   ItemRoomDatabase::class.java,
15                   "item_database"
16               ).fallbackToDestructiveMigration().build()
17               INSTANCE = instance
18               return instance
19           }
20       }
21   }
22}

完整的示例代码如下

文件大小修改时间
app
2022年06月21日
build.gradle
2 kB 2022年06月21日
code-of-conduct.md
4 kB 2022年06月21日
CONTRIBUTING.md
1 kB 2022年06月21日
gradle/wrapper
2022年06月21日
gradle.properties
2 kB 2022年06月21日
gradlew
5 kB 2022年06月21日
gradlew.bat
2 kB 2022年06月21日
LICENSE
11 kB 2022年06月21日
local.properties
348 B 2022年06月21日
README.md
1 kB 2022年06月21日
settings.gradle
669 B 2022年06月21日
roomandroidsqlitedatabase数据库