删除命令
(1) db.execSQL("insert into person(name,phone) values (?,?)",newObject[] { p.getName(), p.getPhone() });
(2) SQLiteDatabase db = dbHelper.getWritableDatabase();// 取得数据库操作实例
ContentValues values =newContentValues();
values.put("name", p.getName());
values.put("phone", p.getPhone());
db.insert("person","name", values);
insert的一种构造方法
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);这是可以的。
(3) db.insertWithOnConflict(Constants.ITEM_ARTICLE_DB_NAME,XXTT_ItemArticleModel.ITEM_ID,values,SQLiteDatabase.CONFLICT_IGNORE);
第4个参数:
CONFLICT_ROLLBACK: 当执行SQL语句违反限制条件时,会停止当前执行的SQL语句,并将数据恢复到操作前的状态
CONFLICT_ABORT: 当执行SQL语句违反限制条件时,会停止当前执行的SQL语句,并将数据恢复到操作前的状态,不过,当前事务下先前执行SQL语句造成的数据变动并不会受到影响。
CONFLICT_FAIL: 当执行SQL语句违反限制条件时,会停止当前执行的SQL语句,不过先前执行的SQL语句造成的数据变化将不会受到影响,而后面的SQL将不会被执行。
CONFLICT_IGNORE: 当插入或者修改内容时违反了限定条件,那么这次数据将不会生效,但是后续的SQL语句会被继续执行。
CONFLICT_NONE: 当操作违反限制条件时,忽略改错误,继续执行后续的SQL语句。
CONFLICT_REPLACE: 当插入或者修改数据时违反了唯一性的限制原则,新的数据会被替换。