Android SQLDatabase类中的in…
来源:互联网 发布:stan smith知乎 编辑:程序博客网 时间:2024/05/16 15:48
table 要插入数据的表的名称
values:一个ContentValues对象,类似一个map.通过键值对的形式存储值。
conflictAlgon:冲突解决方案。例如当数据表主键的唯一性检测出错的时候,就会按照该值设定的值进行处理。
nullColumnHack:当values参数为空或者里面没有内容的时候,我们insert是会失败的(底层数据库不允许插入一个空行),为了防止这种情况,我们要在这里指定一个列名,到时候如果发现将要插入的行为空行时,就会将你指定的这个列名的值设为null,然后再向数据库中插入。
(这里很多人会迷惑,nullColumnHack到底干什么用的,为什么会出现呢。当我们不设定一列的时候,不都是数据库给设为默认值吗?很多字段设置默认值也是null,这里显示的设置也是null,有什么区别吗,怎么会显示设置了之后就允许插入了呢?笔者为了找到原因,我去查看了源代码)
其实在底层,各种insert方法最后都回去调用insertWithOnConflict方法,这里我们粘贴出该方法的部分实现
这里我们可以看到,当我们的ContentValues类型的数据initialValues为null,或者size<=0时,就会再sql语句中添加nullColumnHack的设置。我们可以想象一下,如果我们不添加nullColumnHack的话,那么我们的sql语句最终的结果将会类似insertintotableName()values();这显然是不允许的。而如果我们添加上nullColumnHack呢,sql将会变成这样,insertinto tableName (nullColumnHack)values(null);这样很显然就是可以的。
- Android SQLDatabase类中的in…
- Android——SQLDataBase操作
- android中的 gravity 和…
- Android 中的 Service 全面…
- MSCSLD : Error in…
- Android UI设计中的特效 界面左右…
- Android 任何控件中的EditTex…
- Android Studio中的项目上传…
- android o…
- android …
- Data in USRP : Dive in usrp_rx_c…
- [solve]Bind: Address Already in …
- unrecognized selector sent to in…
- unrecognized selector sent to in…
- Improved logging in Objective-C …
- Command-line Processing in Korn …
- run Windows Mobile connecting in…
- Check a loop in a list with line…
- Java并发编程:Timer和TimerTask(转载)
- c# 托管堆,堆栈【图文非常详细】
- javascript深入理解js闭包
- 【多线程】的学习总结
- KMP算法
- Android SQLDatabase类中的in…
- [I18N] Hardcoded string "电话号…
- C++字典的线性表实现。
- 2013年07月04日
- 五险一金异地转移
- java注释
- 软中断不均的调优
- JAVA flush()的用法和意义
- TOMCAT新增虚拟目录&&安卓…