Android开发12——Andorid中操作数据库的insert的两种方法以及nullColumnHack
2013-08-09 09:05
441 查看
一、发现问题
先看两种方法插入数据
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
http://blog.sina.com.cn/s/blog_67aaf444010161e9.html
先看两种方法插入数据
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
http://blog.sina.com.cn/s/blog_67aaf444010161e9.html
相关文章推荐
- Android开发12——Andorid中操作数据库的insert的两种方法以及nullColumnHack
- Android开发12――Andorid中操作数据库的insert的两种方法以及nullColumnHack
- Android开发12——Andorid中操作数据库的insert的两种方法以及nullColumnHack
- Andorid中操作数据库的insert的两种方法以及nullColumnHack
- Andorid中操作数据库的insert的两种方法以及nullColumnHack
- Andorid中操作数据库的insert的两种方法以及nullColumnHack
- Andorid中操作数据库的insert的两种方法
- Android程序员学PHP开发(40)-ThinkPHP5.0(12)后台操作数据库(3)修改-phpStudy+PhpStorm
- Andorid之SQLite插入以及nullColumnHack
- Android开发之使用sqlite3工具操作数据库的两种方式
- Android开发笔记(十四)数据库操作的基本方法
- Android开发之使用sqlite3工具操作数据库的两种方式
- android小问题--------------------SQLiteDatabase.insert(table, nullColumnHack, values)参数
- Android源码开发-Android系统时间时区以及12/24小时制等修改方法详解
- android 开发零起步学习笔记(十九):android使用全局变量的两种方法
- android开发中调用手机的豌豆荚、应用宝等市场进行评分操作,以及分享功能
- Android中SQLite数据库操作(2)——使用SQLiteDatabase提供的方法操作数据库
- Android中Service中是否能做耗时操作,两种启动模式与服务不被杀死的方法
- C#中两种通过DataTable和DataAdapter操作数据库的方法
- Android中Calendar与Date的区别以及消除时区对日期操作影响的方法