【发布时间】:2015-05-11 09:50:10
【问题描述】:
我的应用程序是这样工作的,我有一个本地数据库,其中填充了来自我的 API 的数据,当我在我的 API 中插入新数据时,应用程序会检查最后修改的项目并同步它,然后在为了实现我正在使用 INSERT OR REPLACE 语句,但它弄乱了我的“faturamento_id”,它正在删除 id 并替换为新的,我希望它继续自动递增(如果可能的话)在那里是要同步的新数据。我该怎么做?
angular.forEach(item.faturamentos, function (fat) {
db.transaction(
function (tx) {
tx.executeSql('INSERT OR REPLACE INTO faturamento_pedidos (valor_a_faturar, ' +
'nota_fiscal, ' +
'_criado,' +
'_modificado , ' +
'_status, ' +
'id_rm, ' +
'cod_id, ' +
'id_rm_pedido, ' +
'id_rm_empresa, ' +
'data, ' +
'informacoes_adicionais ) VALUES (?,?,?,?,?,?,?,?,?,?,?)',
[
fat.valor_a_faturar,
fat.nota_fiscal,
fat.criado,
fat.modificado,
fat.status,
fat.id,
fat.cod_id,
fat.id_rm_pedido,
fat.id_rm_empresa,
fat.data,
fat.informacoes_adicionais
]);
},
txErrorHandler,
function () {
log('Record inserted successfully');
}
);
});
表格:
tx.executeSql("CREATE TABLE IF NOT EXISTS faturamento_pedidos (" +
"faturamento_id Integer PRIMARY KEY AUTOINCREMENT, " +
"_criado Text, " +
"_modificado Text, " +
"_status Text, " +
"id_rm Integer, " +
"id_rm_pedido Integer, " +
"id_rm_empresa Integer, " +
"cod_id Text, " +
"valor_a_faturar Text, " +
"nota_fiscal Text, " +
"data Text, " +
"informacoes_adicionais Text," +
"CONSTRAINT unique_id_rm UNIQUE ('id_rm'))");
tx.executeSql('CREATE INDEX IF NOT EXISTS "faturamento_pedidos.index_faturamento_id" ON "faturamento_pedidos"("faturamento_id");');
【问题讨论】:
-
根据this documentation 当一个 UNIQUE 或 PRIMARY KEY 约束违规发生时,REPLACE 算法在插入或更新当前行之前删除导致约束违规的预先存在的行,并且命令继续正常执行。 我不是 sqlite 专家,所以也许其他人可以提供帮助,但我认为你必须执行
INSERT(没有OR REPLACE)并测试它是否由于约束而失败被侵犯,然后UPDATE在这种情况下。
标签: sql angularjs sqlite cordova ionic-framework