具有外键约束的JDBC / SQLite批处理插入

时间:2013-10-18 00:42:34

标签: sqlite jdbc foreign-keys bulkinsert

我正在尝试将数据从CSV文件导入数据库,但是表A有外键约束表B.我想要的是将数据插入A并在外键匹配时更新B中的相关行B中的主键(并且没有其他问题);否则什么都不会发生。目前,我正在做(稍微复杂一点的)以下内容:

PRAGMA foreign_keys = ON;

for (row in b.csv){
    INSERT INTO b
    VALUES ("b_key", NULL, NULL);
}

for (row in a.csv){
    INSERT OR IGNORE INTO a 
    VALUES ("a_key", "b_key", ...);

    UPDATE OR IGNORE b 
    SET x = "X", y = "Y"
    WHERE key = "b_key";
}

结果是a.csv最终将包含一个行,其中“b_key”不在表b中,此时整个批量更新将失败,异常“外键约束失败”。任何人都知道一种简单(甚至不简单)的方式,我可以让它工作吗?

1 个答案:

答案 0 :(得分:0)

1)在第二个循环中切换INSERT UPDATE的顺序。这样,“b”将在“a”需要之前设置。

2)使用INSERT OR REPLACE而不是UPDATE作为“b”键。更多关于它是如何工作的以及它擅长的原因:SQLite - UPSERT *not* INSERT or REPLACE。基本上,在将任何内容放入“a”表之前,您将保证在“b”中键入密钥。