Room- @Insert


Marks a method in a Dao annotated class as an insert method.

The implementation of the method will insert its parameters into the database.

All of the parameters of the Insert method must either be classes annotated with Entity or collections/array of it.


>>>

将带有Dao注释的类中的方法标记为insert方法。

该方法的实现会将其参数插入数据库。

Insert方法的所有参数必须是带有Entity或其集合/数组注释的类。

示例:

@Dao
 public interface MusicDao {
   @Insert(onConflict = OnConflictStrategy.REPLACE)
   public void insertSongs(Song... songs);

   @Insert
   public void insertBoth(Song song1, Song song2);

   @Insert
   public void insertAlbumWithSongs(Album album, List<Song> songs);
 }

 

# insert方法的目标实体 - entity

通过entity指定了目标实体,则参数可以是任意的POJO类型(Plain Ordinary Java Object- 简单的Java对象),这些类型将被解释为部分实体。 例如:

@Entity
 public class Playlist {
   @PrimaryKey(autoGenerate = true)
   long playlistId;
   String name;
   @Nullable
   String description
   @ColumnInfo(defaultValue = "normal")
   String category;
   @ColumnInfo(defaultValue = "CURRENT_TIMESTAMP")
   String createdTime;
   @ColumnInfo(defaultValue = "CURRENT_TIMESTAMP")
   String lastModifiedTime;
 }

 public class NameAndDescription {
   String name;
   String description
 }

 @Dao
 public interface PlaylistDao {
   @Insert(entity = Playlist.class)
   public void insertNewPlaylist(NameAndDescription nameDescription);
 }

 

而有时候在插入表中的时候,我们不想要重复的去插入若干条数据,往往想要的是替换掉之前已经存在的旧数据,该怎么办弄呢,这里Room已经提供了处理方式-onConflict

# 处理冲突- onConflict

示例:

@Insert(onConflict = OnConflictStrategy.REPLACE)
public void insertSongs(Song... songs);

以下来(onConflict 默认为OnConflictStrategy.ABORT

ABORT

OnConflict策略常量可中止事务。

 

FAIL

不建议使用此常数。 不能按预期工作。 事务回滚。

 

IGNORE

OnConflict策略常数可忽略冲突。

 

REPLACE

OnConflict策略常量可替换旧数据并继续进行事务。

 

ROLLBACK

不建议使用此常数。 不适用于Android当前的SQLite绑定。

 

 


补充 :

OnConflictStrategy.ABORT:

当发生适用的约束违规时,ABORT解析算法会中止当前SQL语句,并显示SQLITE_CONSTRAINT错误,并撤消当前SQL语句所做的任何更改;但是在同一事务中由先前的SQL语句引起的更改将保留,并且该事务保持活动状态。这是默认行为,也是SQL标准指定的行为。

 

OnConflictStrategy.REPLACE:

当发生UNIQUE或PRIMARY KEY约束冲突时,REPLACE算法会在插入或更新当前行之前删除导致约束冲突的现有行,并且该命令将继续正常执行。如果发生NOT NULL约束冲突,则REPLACE冲突解决方案将NULL值替换为该列的默认值,或者如果该列没有默认值,则使用ABORT算法。如果发生CHECK约束或外键约束冲突,则REPLACE冲突解决算法的工作方式类似于ABORT。

当REPLACE冲突解决策略为了满足约束条件而删除行时,仅当启用了递归触发器时,delete触发器才会触发。

对于由REPLACE冲突解决策略删除的行,不会调用更新挂钩。 REPLACE也不会增加更改计数器。本段中定义的异常行为可能会在将来的版本中更改。

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值