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)
我试了好像对我没什么用。。。