加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Sqlite insert步骤nullColumnHack字段的含义

发布时间:2020-12-12 19:46:04 所属栏目:百科 来源:网络整理
导读:sqlite insert方法nullColumnHack字段的含义 增加数据: 参数介绍: table 要插入数据的表的名称 values:一个ContentValues对象,类似一个map.通过键值对的形式存储值。 conflictAlgon:冲突解决方案。例如当数据表主键的唯一性检测出错的时候,就会按照该值
the table to insert the row into optional; may be null. SQL doesn't allow inserting a completely empty row without naming at least one column name. If your provided values is empty,no column names are known and an empty row can't be inserted. If not set to null,the nullColumnHack parameter provides the name of nullable column name to explicitly insert a NULL into in the case where your values is empty. this map contains the initial column values for the row. The keys should be the column names and the values the column values

nullColumnHack是说当出现values是空时,那么我们把指定的列设置为null,再插入

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

sqlite insert方法nullColumnHack字段的含义

  增加数据:

  参数介绍:

  table 要插入数据的表的名称

  values:一个ContentValues对象,类似一个map.通过键值对的形式存储值。

  conflictAlgon:冲突解决方案。例如当数据表主键的唯一性检测出错的时候,就会按照该值设定的值进行处理。

  nullColumnHack:当values参数为空或者里面没有内容的时候,我们insert是会失败的(底层数据库不允许插入一个空行),为了防止这种情况,我们要在这里指定一个列名,到时候如果发现将要插入的行为空行时,就会将你指定的这个列名的值设为null,然后再向数据库中插入。

  (这里很多人会迷惑,nullColumnHack到底干什么用的,为什么会出现呢。当我们不设定一列的时候,不都是数据库给设为默认值吗?很多字段设置默认值也是null,这里显示的设置也是null,有什么区别吗,怎么会显示设置了之后就允许插入了呢?笔者为了找到原因,我去查看了源代码)

  其实在底层,各种insert方法最后都回去调用insertWithOnConflict方法,这里我们粘贴出该方法的部分实现

  

  这里我们可以看到,当我们的ContentValues类型的数据initialValues为null,或者size<=0时,就会再sql语句中添加nullColumnHack的设置。我们可以想象一下,如果我们不添加nullColumnHack的话,那么我们的sql语句最终的结果将会类似insert into tableName()values();这显然是不允许的。而如果我们添加上nullColumnHack呢,sql将会变成这样,insert into tableName (nullColumnHack)values(null);这样很显然就是可以的。


nullColumnHackvalues
    推荐文章
      热点阅读