原创内容,转载请注明原文网址:http://homeqin.cn/a/wenzhangboke/jishutiandi/Android/2019/0609/532.html
你可能在批量处分一个事务的时候,想要批量插入一系列的数据,不过这些数据当增加完一次以后,从新增加的时候,你不想要从新增加,只是想将原有的数据举行更新,例如:我想要通过Excel将一系列的图书导入到数据库中,而这些图书在你下一次编纂以后,从新导入,只是对原有的数据举行点窜。以上是一个交易的场景。
在MSSQL中,你可以应用诸如:
IF NOT EXISTS(SELECT * FROM Book WHERE ….) THEN INSERT INTO ... ELSE UPDATE SET ...
这样的SQL语法显露。而在SQLite中,不支撑这样的语法。
而对应的,在Sqlite中可以应用 Replace Into 大概 Insert Or Replace Into 这样的语法格式。
现在,我应用SQLite Developer的Sqlite客户端数据库经管对象,来建立数据表,对应字段如下:
image
而后,标签切换到“索引”栏:
image
这里我将Name(书名)和Author(作者)建立索引,并且划定为唯独索引。留存数据表。
这样就意味着只要Name和Author对应是相像的,Replace into 对应的就造成 Update,要是不实现相像,就对应造成 Insert 语句。
于是我在“盘问数据”中,实行SQL语句:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
REPLACE INTO tbl_book
(
Name ,
Author ,
PublishDate ,
pagecount ,
Memo
)
VALUES
(
'WF高级程序计划' ,
'Bruce Bukovics' ,
date( ) ,
454 ,
'Test'
) ;
第一次实行时,由于表中没稀有据,以是号令转换为Insert;
image
当第二次实行时,由于表中曾经存在相像的“Name”和“Author”的数据,于是不举行插入,而号令将转换为Update。
是以,当你实行如下语句时:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
REPLACE INTO tbl_book
(
Name ,
Author ,
PublishDate ,
pagecount ,
Memo
)
VALUES
(
'WF高级程序计划' ,
'Bruce Bukovics' ,
date( ) ,
500 , -- 页码总数转变
'Test2' -- 备注转变
) ;
实行后果:
image
页码和备注都转变了,申明这里实行了Update。
而后我点窜Name称号:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
REPLACE INTO tbl_book
(
Name ,
Author ,
PublishDate ,
pagecount ,
Memo
)
VALUES
(
'WPF揭秘' , -- 书名转变
'Bruce Bukovics' ,
date( ) ,
500 ,
'Test2'
) ;
实行后果:
image
插入了一条图书的纪录,一样你也能够尝试转变Author,一样也是插入纪录。
这样,您便通过在表中建立唯独索引并且行使Replace到达Insert OR Update的目的。
整体照旧很简单,这个是我在做嵌入式名目中的一点心得:)
上篇:上一篇:ContextCompat.checkSelfPermission失效的问题
下篇:下一篇:Android运用剖判包错误的缘故