sqlite中的replace、insert、update之前的区别
本文转自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之前的区别的更多相关文章
- 在Sqlite中通过Replace来实现插入和更新
你可能在批量处理一个事务的时候,想要批量插入一系列的数据,但是这些数据当添加完一次之后,重新添加的时候,你不想要重新添加,只是想将原有的数据进行更新,例如:我想要通过Excel将一系列的图书导入到 ...
- SQLite中特殊的INSERT语句
SQLite中特殊的INSERT语句 在SQLite中,INSERT是基本语句,用来向表中插入数据.但是当表中存在字段存在唯一.非空.检查.主键等约束时,插入的数据很容易和约束冲突,造成插入操作失 ...
- JAVA中string.replace()和string.replaceAll()的区别及用法
乍一看,字面上理解好像replace只替换第一个出现的字符(受javascript的影响),replaceall替换所有的字符,其实大不然,只是替换的用途不一样. public String r ...
- 《oracle每天一练》Merge Into 语句代替Insert/Update在Oracle中的应用实战
转载自窃破天道 动机: 想在Oracle中用一条SQL语句直接进行Insert/Update的操作. 说明: 在进行SQL语句编写时,我们经常会遇到大量的同时进行Insert/Update的语句 ,也 ...
- Merge Into 语句代替Insert/Update在Oracle中的应用实战
动机: 想在Oracle中用一条SQL语句直接进行Insert/Update的操作. 说明: 在进行SQL语句编写时,我们经常会遇到大量的同时进行Insert/Update的语句 ,也就是说当存在记录 ...
- Sqlite数据多表联合update
其实在Mysql中,多表联合update不是什么难事. 语法: 1 UPDATE table_references SET col_name1=expr1 [, col_name2=expr2 ... ...
- 使用Merge Into 语句实现 Insert/Update
网址: http://www.eygle.com/digest/2009/01/merge_into_insertupdate.html 动机: 想在Oracle中用一条SQL语句直接进行Insert ...
- Oracle Merge Into Insert/Update
出自:http://blog.csdn.net/yuzhic/article/details/1896878 动机: 想在Oracle中用一条SQL语句直接进行Insert/Update的操作. 说明 ...
- oracle中execute immediate的使用(select/insert/update/delete)(转)
execute immediate的语法如下: execute immediate 'sql'; execute immediate 'sql_select' into var_1, var_2; e ...
随机推荐
- NET异常 在 getsockopt 或 setsockopt 调用中指定的一个未知的、无效的或不受支持的选项或层次。
var Listener = new TcpListener(IPAddress.Any, port); Listener.AllowNatTraversal(true); // 在WIN8中调试没问 ...
- js--使用构造器函数来新建对象及操作
通过new操作符来调用函数,来达到访问对象this值得目的,构造器将其创建的对象返回给我们. 直接上代码 //创建构造器函数 function Gadget(name, color){ this.na ...
- 全面了解 Linux 服务器 - 4. 查看 Linux 系统的平均负载
可使用 uptime.top.w 命令来查看. 以 uptime 命令为例: liuqian@ubuntu:~$ uptime 17:31:26 up 7:27, 2 users, load aver ...
- (DP)3.Longest Substring Without Repeating Characters
Given a string, find the length of the longest substring without repeating characters. For example, ...
- apache配置Options详解
http://www.365mini.com/page/apache-options-directive.htm Options指令是Apache配置文件中一个比较常见也比较重要的指令,Options ...
- JAVA 新手问题: Request 编码编译出错,Unhandled exception type UnsupportedEncodingException
新手: 编写如下代码 private void Exec(HttpServletRequest Req,HttpServletResponse Response) //throws ServletEx ...
- JSTL+MyEclipse8.5+Tomcat配置
使用JSTL的时候需要配置,即导入stdandard.jar和jstl.jar包,并在web.xml下对jstl进行配置.下面是使用步骤: 1. 解压jakarta-taglibs-standard- ...
- Linux下如何修改ip地址
在Linux的系统下如何才能修改IP信息 以前总是用ifconfig修改,重启后总是得重做.如果修改配置文件,就不用那么麻烦了- A.修改ip地址 即时生效: # ifconfig eth0 192. ...
- IQ推理:P先生和Q先生
P先生.Q先生具有足够的推理能力.这天,他们正在接受面试. 他们知道桌子的抽屉里有16张扑克牌:红桃 A Q 4黑桃 J 8 4 2 7 3草花 K Q 5 4 6方块 A 5约瀚教授从这16张牌中挑 ...
- mac配置nginx
基本的安装其实网上一大半教程: 安装:brew install nginx 配置注意要点: 1.主要配置监听的端口和php-fpm监听的端口相同可以配置成默认的:(127.0.0 ...