android小问题--------------------SQLiteDatabase.insert(table, nullColumnHack, values)参数
来源:互联网 发布:淘宝宝贝复制破解 编辑:程序博客网 时间:2024/06/02 02:02
SQLiteDatabase除了可以通过execSQL()直接执行SQL语句之外,还可以通过.insert(table, nullColumnHack, values)方法直接插入操作。
第一个参数为表名,第三个参数为ContentValues实例,以键值对的形式将列和值Put进去然后放入第三个参数为就行了。
那么第二个参数是什么意思,总有人搞不明白,第二个参数的字面意思其实就是:当第三个参数传入null时,第二个参数为什么。也就是说如果第三个参数不为null,那么第二个参数是不起作用的。那这又是为什么,看源码:
因为底层Insert()方法直接调用了insertWithOnConflict()方法,那么就直接贴此方法的源码:
acquireReference(); try { StringBuilder sql = new StringBuilder(); sql.append("INSERT"); sql.append(CONFLICT_VALUES[conflictAlgorithm]); sql.append(" INTO "); sql.append(table); sql.append('('); Object[] bindArgs = null; int size = (initialValues != null && initialValues.size() > 0) ? initialValues.size() : 0; if (size > 0) { bindArgs = new Object[size]; int i = 0; for (String colName : initialValues.keySet()) { sql.append((i > 0) ? "," : ""); sql.append(colName); bindArgs[i++] = initialValues.get(colName); } sql.append(')'); sql.append(" VALUES ("); for (i = 0; i < size; i++) { sql.append((i > 0) ? ",?" : "?"); } } else { sql.append(nullColumnHack + ") VALUES (NULL"); } sql.append(')');
可以看到,此方法其实在底层也是拼接了SQL串。。。所以我说不如直接去学学SQL。。要不不懂SQL的人根本不明白为什么。。其实底层逻辑是这样的,它会根据三个参数拼接出这样的sql语句 insert into tableNmae (......) values(......) values中的值就由传入的第三个参数拼接出来的,而我们可以看到,如果第三个值传入为Null,那么去执行
sql.append(nullColumnHack + ") VALUES (NULL");也就是是说最后拼接出来的SQL为:insert into tableName(null)values(null),这样sql语法就错误的。。会报错。。所以。。就是这样的。
0 0
- android小问题--------------------SQLiteDatabase.insert(table, nullColumnHack, values)参数
- SqliteDatabase insert(String table, String nullColumnHack, ContentValues values)
- SqliteDatabase insert(String table, String nullColumnHack, ContentValues values)
- SqliteDatabase insert(String table, String nullColumnHack, ContentValues values)
- SqliteDatabase insert(String table, String nullColumnHack, ContentValues values)
- Android---SQLITEDATABASE中QUERY、INSERT、UPDATE、DELETE方法参数说明
- mysql 中使用insert into table() values();插入中文问题
- SQLiteDatabase.insert函数参数解释说明
- VC insert into table() values(变量)
- Android初学者之SQLiteDatabase中query、insert、update、delete方法参数说明
- Android学习笔记九:SQLiteDatabase中query、insert、update、delete方法参数说明
- 《Android学习笔记》SQLiteDatabase中query、insert、update、delete方法参数说明
- SQLiteDatabase中query、insert、update、delete方法参数说明
- SQLiteDatabase中query、insert、update、delete方法参数说明
- SQLiteDatabase中query、insert、update、delete方法参数说明
- SQLiteDatabase中query、insert、update、delete方法参数说明
- SQLiteDatabase中query、insert、update、delete方法参数说明
- SQLiteDataBase中query、insert、update、delete方法参数说明
- 改变系统默认的语言,back改为中文,delete改为中文
- Codeforces 628B New Skateboard【数学】
- Android的通讯员——notification
- spark源码学习(六)--- DAGScheduler中的task的划分
- oracle之函数使用大全
- android小问题--------------------SQLiteDatabase.insert(table, nullColumnHack, values)参数
- 测试必备技能系列4:如何用SSH向linux服务器上传下载文件
- Codeforces 628C Bear and String Distance 【构造】
- java中transient关键字
- test
- 多线程
- [BZOJ3626] [LNOI2014]LCA
- OS X EL Capitan 开启适用于Force Touch的三指拖拽
- ArrayList源码分析