【发布时间】:2020-09-25 04:13:39
【问题描述】:
我正在编写一个 java 程序来组合两个具有相同架构的数据库。这是 SQLite 或我的查询的问题,而不是 Java 代码,因为我能够在 DB Browser 应用程序中完全复制它。
我有 2 个数据库:一个正在合并,一个是目标。
我最初连接到要合并的数据库,然后将目标数据库附加为“dest”。 我发出以下查询来复制数据:
INSERT or IGNORE into dest.AnalogInput SELECT * from AnalogInput where timestamp >= 1600824664131000000 AND timestamp <= 1600824664131000000
这工作正常并插入数据。如果我在相同的数据上再次运行它,它会在目标数据库中插入一个副本。我认为“OR IGNORE”的目的是为了防止重复?我的查询不正确还是我对 OR IGNORE 的理解不正确?
编辑:是的,我知道时间戳是相同的 - 这是一个通用查询,我只是在单个时间戳上使用几个样本进行测试。
谢谢!
【问题讨论】:
-
dest.AnalogInput 中是否有任何唯一约束?
-
没有。该数据库由 RTI DDS Recorder 自动生成。 DB Browser 中列出的 Create 语句为:CREATE TABLE "AnalogInput" ("SampleInfo_source_timestamp" INTEGER,"machineId" INTEGER,"ioId" INTEGER,"value" REAL)
-
那么没有什么可以阻止插入。
-
你能在事后将它添加到数据库中吗?
-
检查我的答案。