You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Room在本地数据库插入对象列表?附CidVo实体类代码

没问题,我来一步步教你怎么用Room批量插入CidVo对象列表,结合你给出的实体类,具体操作如下:

1. 创建Dao接口

首先你需要定义一个数据访问对象(Dao),Room的@Insert注解天然支持接收列表参数,写起来非常方便:

Kotlin版本

@Dao
interface CidDao {
    // 批量插入List<CidVo>,可选指定冲突策略(比如重复主键时替换或忽略)
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    suspend fun insertCidList(cidList: List<CidVo>)
}

Java版本

@Dao
public interface CidDao {
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void insertCidList(List<CidVo> cidList);
}

说明:onConflict是可选参数,根据业务需求选就行:

  • OnConflictStrategy.REPLACE:主键重复时,替换已有数据
  • OnConflictStrategy.IGNORE:主键重复时,跳过当前插入的对象
  • 不指定的话默认是OnConflictStrategy.ABORT,会直接抛出异常
2. 创建Room Database类

接下来要创建数据库的入口类,关联你的CidVo实体和上面定义的Dao:

Kotlin版本

@Database(entities = [CidVo::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract fun cidDao(): CidDao

    // 推荐单例实现,避免重复创建数据库实例
    companion object {
        @Volatile
        private var INSTANCE: AppDatabase? = null

        fun getInstance(context: Context): AppDatabase {
            return INSTANCE ?: synchronized(this) {
                val instance = Room.databaseBuilder(
                    context.applicationContext,
                    AppDatabase::class.java,
                    "app_database"
                ).build()
                INSTANCE = instance
                instance
            }
        }
    }
}

Java版本

@Database(entities = {CidVo.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
    public abstract CidDao cidDao();

    // 单例实现
    private static volatile AppDatabase INSTANCE;

    public static AppDatabase getInstance(Context context) {
        if (INSTANCE == null) {
            synchronized (AppDatabase.class) {
                if (INSTANCE == null) {
                    INSTANCE = Room.databaseBuilder(context.getApplicationContext(),
                            AppDatabase.class, "app_database")
                            .build();
                }
            }
        }
        return INSTANCE;
    }
}
3. 调用批量插入方法

最后一步就是获取Dao实例,执行插入操作。注意:Room默认禁止在主线程操作数据库,所以要放到后台线程执行。

Kotlin(协程示例)

// 在ViewModel或Repository中调用
val cidDao = AppDatabase.getInstance(context).cidDao()
// 构造要插入的列表
val cidList = listOf(
    CidVo().apply {
        idCid = "cid_001"
        dsCid = "第一个CID"
    },
    CidVo().apply {
        idCid = "cid_002"
        dsCid = "第二个CID"
    }
)

// 用协程在后台执行
viewModelScope.launch(Dispatchers.IO) {
    cidDao.insertCidList(cidList)
}

Java(Executor示例)

// 获取Dao实例
CidDao cidDao = AppDatabase.getInstance(context).cidDao();

// 构造要插入的列表
List<CidVo> cidList = new ArrayList<>();
CidVo cid1 = new CidVo();
cid1.setIdCid("cid_001");
cid1.setDsCid("第一个CID");
cidList.add(cid1);

CidVo cid2 = new CidVo();
cid2.setIdCid("cid_002");
cid2.setDsCid("第二个CID");
cidList.add(cid2);

// 用Executor在后台执行
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.execute(() -> cidDao.insertCidList(cidList));
executor.shutdown();
额外注意点
  • 你的CidVo实体中idCid是@NonNull的主键,所以每个要插入的CidVo对象必须设置有效的idCid值,否则会抛出异常。
  • 如果还没配置Room依赖,记得先在项目中添加room-runtime、room-compiler,Kotlin项目还可以加room-ktx简化操作。

内容的提问来源于stack exchange,提问作者user6008330

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:16:17