• QQ
  • nahooten@sina.com
  • 常州市九洲新世界花苑15-2

Android

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

原创内容,转载请注明原文网址: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运用剖判包错误的缘故