Android开发12——Andorid中操作数据库的insert的两种方法以及nullColumnHack
来源:互联网 发布:中车株洲电力机车知乎 编辑:程序博客网 时间:2024/05/29 16:32
一、发现问题
先看两种方法插入数据
public void save(Person p){ SQLiteDatabase db = dbHelper.getWritableDatabase(); db.execSQL("insert into person(name,phone) values (?,?)", new Object[] { p.getName(), p.getPhone() }); db.close();}public void save(Person p){ SQLiteDatabase db = dbHelper.getWritableDatabase(); // 取得数据库操作实例 ContentValues values = new ContentValues(); values.put("name", p.getName()); values.put("phone", p.getPhone()); db.insert("person", "name", values); db.close();}
这两种方法可读性都比较好,但我们注意到db.insert("person", "name", values);操作中有一个name字段是什么意思呢?
二、解决问题
insert的一种构造方法
public long insert (String table, String nullColumnHack, ContentValues values)
table
要插入数据的表的名称
values
ContentValues对象,类似一个map通过键值对的形式存储值。
nullColumnHack
当values参数为空或者里面没有内容的时候,insert是会失败的(底层数据库不允许插入一个空行),为了防止这种情况,要在这里指定一个列名,到时候如果发现将要插入的行为空行时,就会将你指定的这个列名的值设为null,然后再向数据库中插入。通过观察源码的insertWithOnConflict方法可以看到当ContentValues类型的数据initialValues为null或size<=0时,就会在sql语句中添加nullColumnHack的设置。
若不添加nullColumnHack则sql语句最终的结果将会类似insert into tableName()values();这是不允许的。
若添加上nullColumnHack则sql语句将会变成insert into tableName (nullColumnHack)values(null);这是可以的。
参考地址:http://mofan.iteye.com/blog/1412262
- Android开发12——Andorid中操作数据库的insert的两种方法以及nullColumnHack
- Andorid中操作数据库的insert的两种方法以及nullColumnHack
- Andorid中操作数据库的insert的两种方法以及nullColumnHack
- Andorid中操作数据库的insert的两种方法以及nullColumnHack
- Andorid中操作数据库的insert的两种方法
- Sqlite insert方法nullColumnHack字段的含义
- Sqlite insert步骤nullColumnHack字段的含义
- Andorid之SQLite插入以及nullColumnHack
- 【Content Provider】 Sqlite insert步骤nullColumnHack字段的含义
- 数据库两种 insert的区别
- Android中SQLite数据库操作(2)——使用SQLiteDatabase提供的方法操作数据库
- android两种方法操作Sqlite数据库
- android中SQLite数据库的基本操作以及重要方法介绍
- Android开发之使用sqlite3工具操作数据库的两种方式
- android sqlite的SqliteDataBase.insert()方法,以及如何在事务管理中使用
- 数据库的两种操作
- Android中计时的两种方法
- Android中实现SQLite数据库CRUD操作的两种方式
- C#开发实战1200例(第Ⅰ卷)(奋斗的小鸟)_PDF电子书
- sql基本语法
- 央视《家有妙招》整理版,共250招,值得收藏
- OpenWRT配置及应用
- Oracle group by及其若干相关函数的一些说明
- Android开发12——Andorid中操作数据库的insert的两种方法以及nullColumnHack
- 对愚公移山的反思
- C#程序实现动态调用DLL的研究
- HBase Java客户端编程
- T-SQL的基本语法
- stl containers inspectors for gdb
- Hadoop全分布式环境搭建
- 编译python
- 解决Fedora不能使用man手册的问题