比较并仅将新记录插入sqlite数据库

时间:2013-08-29 09:25:20

标签: database sqlite insert

我有sqlite本地数据库。我想只从远程服务器向本地数据库插入新数据。由于没有时间字段,很难只插入新记录。我怎么能实现这一点?我的混合移动应用需要这个。任何帮助都有帮助......谢谢。

两张桌子:

我的本​​地数据库表是

tbl_orders
 id      name      age
  1       yyy       30
  2       xxx       20

我的远程数据库表是

tbl_orders
 id      name      age
 1       yyy       36
 2       xxx       20
 3       vvv       40
 4       zzz       37

在上面,远程表还包含两个记录,并且第一个记录(年龄列)中的值也被更改。现在我想插入并更新此(即第1,第3,第4)到我的本地sqlite表而不删除并重新插入整个表格。

2 个答案:

答案 0 :(得分:0)

您的表格是在两个DB中复制的吗?

如果是,您可以在WHERE条件中使用NOT EXISTS子句执行INSERT。或者,在源表中添加datetime字段。

另一种方式: 在源数据库(fl_sent)中添加一个布尔字段,在数据库中创建新行或更新它们时由触发器填充。默认值为false,当您要同步数据库时,您的选择基于此字段

SELECT * FROM myTable WHERE fl_sent = 0

如需更完整的答案,请张贴您的表格。

评论后编辑:

解决方案1: 在远程表(源)中添加字段日期(如果需要,可以编写一个触发器来切换此字段),然后根据此日期执行可发送查询。

解决方案2: 添加由零设置的字段标志(fl_sent)(如果需要,可以编写一个触发器来切换此字段),然后根据此标志执行可发送的查询。

答案 1 :(得分:0)

您应在UNIQUE中添加id约束。

重新定义本地表:

CREATE TABLE tbl_orders(UNIQUE id, name, age);

或没有重新定义表

CREATE UNIQUE INDEX tbl_orders_id ON tbl_orders(id);

使用约束,您的更新将成为一个声明:

INSERT OR REPLACE INTO local.tbl_orders SELECT * FROM remote.tbl_orders;