Android 往数据库中建表出入数据时数据重复

本文讲述了在Android应用中使用ROOM库处理数据库插入时遇到的数据重复问题。通过理解唯一索引和OnConflict策略,作者发现添加unique属性并正确设置冲突解决策略是关键。解决方案包括在表定义中使用@Unique和@Insert(onConflict=OnConflictStrategy.REPLACE)。
摘要由CSDN通过智能技术生成

Android 往数据库中建表出入数据时数据重复

使用接口两次请求数据,放入数据库,android数据库通过ROOM封装,一开始想的是通过sid进行判断,相同的先删除然后再添加,实现替换的功能。用SQLitespy查看,先将android data/data/包名/database下的数据库(3个一起方可查看),具体路径为Device File Explorer下的data/data/包名/database下的数据库名 .db 和 .db-shm 和 .db-wal 三个一起右击 save as 选择自己的目录,然后打开 SQLitespy打开该目录下的文件,注意在 SQLitespy 打开的情况下 save as 可能会失败。

SQLitespy选择File,open database,选择目录,打开数据库名,在左侧选择自己的表的名称,双击查看。

我遇到的问题是两次请求的数据虽然通过先删除再添加的方式处理,但是查了一下好像因为同时请求,这样会造成死锁什么的。

我想了蛮多办法,什么先建个List,在list中操作添加数据,最后再往数据库中直接添加list中的数据,但是这样因为我的网络请求都是直接请求完一起写入数据库,所以在数据库中还是有重复的数据。

最后发现了方法,在表中的建表的时候,

@Entity(tableName = "表名", indices = [Index(value = ["sid"], unique = true)] )

@Entity(tableName = "表名", indices = [Index(value = ["sid"], unique = true)] )

醉了啊,需要在表名后面添加唯一标识,就不会重复了。表直接根据sid来判重了,还有一种方式是可以在Dao中添加数据的方法onConflict

@Insert(onConflict = OnConflictStrategy.REPLACE)

我试了好像对我没什么用。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值