sqlite - 如何在Ionic 2和SQLite上处理事务和相关记录?

标签 sqlite ionic-framework transactions ionic2

我正在使用SQLite创建Ionic 2应用程序。我已经能够成功执行命令,创建表并在数据库中插入记录。现在,我正在尝试插入一些父记录和明细记录,并且我想在事务内进行此操作,以便在插入子记录时发生任何错误时,父记录不会损坏。

好了,根据此链接(https://github.com/litehelpers/Cordova-sqlite-storage),我可以通过以下方式使用事务:

db.transaction(function(tx) {
    tx.executeSql("Insert into ParentTable(ParentName) values ('name')");
    tx.executeSql("Insert into ChildTable(ParentID, ChildName) values (0, 'value1')");
}, function(error) {
    console.log('Transaction ERROR: ' + error.message);
}, function() {
    console.log('Transaction OK');
});


问题是我需要从第一个插入中获取ParentID才能在第二个插入中使用。 insertSQL命令具有一个callback,因此我编写了以下代码:

db.transaction(function(tx) 
{
    tx.executeSql("Insert into ParentTable(ParentName) values ('name')", 
        function(tx, rs) 
        {
            /* Location 1 */
            var parentID = rs.insertId;
            tx.executeSql("Insert into ChildTable(ParentID, ChildName) values (?, 'value1')", [parentID]);
        });
    /* Location 2 */
}, function(error) {
    console.log('Transaction ERROR: ' + error.message);
}, function() {
    console.log('Transaction OK');
});


因此,我有疑问。由于executeSql是异步的,因此位置2将在位置1之前执行。
问题是:db.transaction超出范围时,事务将在位置2之后完成吗?
如果是,则位置1将在事务完成后执行,那么如何使其在事务内执行?

如果否,它将何时提交或回滚?

最佳答案

您必须使用promise来级联两个异步任务。

关于sqlite - 如何在Ionic 2和SQLite上处理事务和相关记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45406601/

相关文章:

java - Android - Create Table 中的插入操作 - 空对象引用错误

android - 从 SQLite 数据库表中删除所有表行

javascript - 捕获第一个视频帧

javascript - 如何在 Meteor + Ionic 应用程序中使用 Meteor 方法

android - 成功构建后由于谷歌播放服务导致的 ionic 抛出错误

database - Zend 2 数据库事务?

sql - 我可以使用LIMIT和OFFSET迭代地获取SELECT查询的结果吗?

iPhone Core Data 不从 Sqlite3 获取任何数据

php - PHP中的数据库事务回滚处理

php - MySQL 查询不起作用