【Content Provider】 Sqlite insert步骤nullColumnHack字段的含义

【Content Provider】 Sqlite insert步骤nullColumnHack字段的含义,第1张

概述http://hi.baidu.com/dilqut/item/9cf3bd8b682f395a840fab93 增加数据:  参数介绍: table 要插入数据的表的名称 values:一个ContentValues对象,类似一个map.通过键值对的形式存储值。 conflictAlgon:冲突解决方案。例如当数据表主键的唯一性检测出错的时候,就会按照该值设定的值进行处理。 nullColumn

http://hi.baIDu.com/dilqut/item/9cf3bd8b682f395a840fab93


增加数据:


参数介绍:

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);这样很显然就是可以的。 总结

以上是内存溢出为你收集整理的【Content Provider】 Sqlite insert步骤nullColumnHack字段的含义全部内容,希望文章能够帮你解决【Content Provider】 Sqlite insert步骤nullColumnHack字段的含义所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1172669.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存