本文转自http://www.ithao123.cn/content-933827.html,在此感谢作者

android数据库操作,有两种方式,一种用android提供给我们的数据库操作函数insert、update、replace,我用到的就是这三种。另外一种方式就是利用数据库语言进行操作,也就是利用execSQL这个函数后面带sqlite数据库操作语言进行操作,sqlite中的sql语言和标准的sql语言大同小异,但是你如果是想有针对性的了解,建议你买一本书《SQLite权威指南》,这本书是sqlite官方网站推荐的,我买的是中文版的,当当上就有的卖。

这里主要讲的几个容易混淆的点:

第一:android给我们的replace函数,这个函数其实相当于sql语言中的insert or update,大致是这个意思,意思是假如表中你定义的唯一的字段,比如_id=1,是主键!你利用contentvalues传入的参数中,假如_id为1的字段是表中存在的,那么就不会重新生成一条记录,而是Update当前行,当然,这个和update有很大的区别,replace会完全把所有信息给抹掉,然后根据你给出的约束条件,比如:默认值等之类的信息,重新生成一条字段。反之,不存在你给定的_id字段,那么会生成一条新的_id=1的字段。

第二:android给定的update函数,如果你使用的update函数,假如,你update_id=1的字段,如果表中不存在_id=1的字段,那么是会报错的。而你用sqlite语句执行同样的操作,update同样的字段,假如不存在_id=1的字段,它不会执行任何操作,也不会报错。这是他们的区别。

第三:冲突解决,这一块比较复杂,本人也没有搞的十分清楚。你可以在表里定义冲突解决,也可以在字段上定义冲突解决。首先,你用android给出的函数,是不能完成冲突解决的,也有可能是我没有发现这样功能的函数?我们通常用sql语句,insert or ignore这样的形式来实现sql语句的冲突解决。但是sql语句的冲突解决貌似没有字段级的冲突解决好用。我们来讲一下字段级别的冲突解决,比如,你想实现一个这样的功能:你要在一张表里面插入记录,你想新插入表里_id值不存在的字段,但是又不想破坏掉_id已经存在的任何信息,那么你可以在_id字段设置唯一,并且在唯一的基础上设置冲突解决为ignore,这样,既插入了你想要插入的数据,也原封不动的保留了那些你不想破坏的数据。其他的冲突解决,fail是当约束违反发生时,sqlite命令立马终止,报错!但是不恢复约束违反之前已经修改的记录,这样很不好,所以不推荐使用。replace这个很好理解,当违反唯一约束的时候,sqlite将造成这种违反的记录删除,也就是删除原来的记录,插入新的记录,经过调试,replace并不保存原来的记录的任何信息。abort,当约束违反发生时,sqlite恢复命令所做的所有改变并且终止命令。这是sqlite的默认冲突解决方案,也是sql标准定义的行为。最后一个是rollback,很好理解,当违反约束的动作发生时,终止当前命令和整个事物,当前事务和命令所做的任何操作和改变都将被回滚!

这样,你可以用insert配合字段级别的ignore可以完成条件针对_id或者其他字段的update操作,弥补了android的update报错,和sql语句中update操作针对_id不存在的字段不添加的缺陷。

sqlite中的replace、insert、update之前的区别的更多相关文章

  1. 在Sqlite中通过Replace来实现插入和更新

      你可能在批量处理一个事务的时候,想要批量插入一系列的数据,但是这些数据当添加完一次之后,重新添加的时候,你不想要重新添加,只是想将原有的数据进行更新,例如:我想要通过Excel将一系列的图书导入到 ...

  2. SQLite中特殊的INSERT语句

    SQLite中特殊的INSERT语句   在SQLite中,INSERT是基本语句,用来向表中插入数据.但是当表中存在字段存在唯一.非空.检查.主键等约束时,插入的数据很容易和约束冲突,造成插入操作失 ...

  3. JAVA中string.replace()和string.replaceAll()的区别及用法

    乍一看,字面上理解好像replace只替换第一个出现的字符(受javascript的影响),replaceall替换所有的字符,其实大不然,只是替换的用途不一样.    public String r ...

  4. 《oracle每天一练》Merge Into 语句代替Insert/Update在Oracle中的应用实战

    转载自窃破天道 动机: 想在Oracle中用一条SQL语句直接进行Insert/Update的操作. 说明: 在进行SQL语句编写时,我们经常会遇到大量的同时进行Insert/Update的语句 ,也 ...

  5. Merge Into 语句代替Insert/Update在Oracle中的应用实战

    动机: 想在Oracle中用一条SQL语句直接进行Insert/Update的操作. 说明: 在进行SQL语句编写时,我们经常会遇到大量的同时进行Insert/Update的语句 ,也就是说当存在记录 ...

  6. Sqlite数据多表联合update

    其实在Mysql中,多表联合update不是什么难事. 语法: 1 UPDATE table_references SET col_name1=expr1 [, col_name2=expr2 ... ...

  7. 使用Merge Into 语句实现 Insert/Update

    网址: http://www.eygle.com/digest/2009/01/merge_into_insertupdate.html 动机: 想在Oracle中用一条SQL语句直接进行Insert ...

  8. Oracle Merge Into Insert/Update

    出自:http://blog.csdn.net/yuzhic/article/details/1896878 动机: 想在Oracle中用一条SQL语句直接进行Insert/Update的操作. 说明 ...

  9. oracle中execute immediate的使用(select/insert/update/delete)(转)

    execute immediate的语法如下: execute immediate 'sql'; execute immediate 'sql_select' into var_1, var_2; e ...

随机推荐

  1. Ajax跨域问题

    为了数据安全,默认情况下ajax请求是不支持跨域访问. 但是可以通过以下方法让ajax接收跨域API地址 第一种:JSONP比较老,较简单的请求可以考虑使用. JS代码 $(function () { ...

  2. web.xml 文件配置01

    web.xml 文件配置01   前言:一般的web工程中都会用到web.xml,方便开发web工程.web.xml主要用来配置Filter.Listener.Servlet等.但是要说明的是web. ...

  3. phonegap(cordova)环境配置

    首先要配置好  java jdk 和 java jre 环境 配置之后 控制台  javac -version 查看是否配置成功 然后配置 Android sdk 配置之后 控制台 输入 adb 查看 ...

  4. oracle的char和varchar类型

    源地址:https://zhidao.baidu.com/question/140310197.html varchar与char的区别就在于是否可变长度.char(5)就是定义一个5个字符长度的字符 ...

  5. Chap3: question: 11 - 18

    11. double 数值的整数次方 note: 浮点数表示时有误差,判等时必须自己根据精度要求实现. #include <iostream> #include <ctime> ...

  6. power

    http://software.intel.com/en-us/articles/power-efficiency-analysis-and-sw-development-recommendation ...

  7. cocos2dx3.0 removeFromParent和removeAllChildren含义

    顾名思义,removeFromParent就是把自己从父亲那里移除,removeAllChildren就是移除自己所有的孩子,这些方法的具体实现都在基类Node里面,通过查看代码也很容易看到怎么实现的 ...

  8. shell 初学者 必读 ,强烈推荐新手读

    背景: 很多人从C/C++转化而来,看了学习文档之后,踩入了很多坑 1 对变量赋值 不要有空格 a=123 # 正确 a = 123 # 错误 2  if语句 [] 要留有空格,变量最好加" ...

  9. 关于 presentViewController 时机

    类似微信.QQ这些应用如果用户没有登录,会弹出登录界面,如果 presentViewController 是写在  viewDidAppear 之前,会有警告 Presenting view cont ...

  10. 用移动智能设备访问Ossim系统

    用移动智能设备访问Ossim系统 下面我们使用iPad,iPhone访问ossim系统的效果. 高清视频:http://www.tudou.com/programs/view/TikMZ1z1ELw ...