【问题标题】:New transaction is waiting for open operation sqlite新事务正在等待打开操作 sqlite
【发布时间】:2016-09-01 05:51:16
【问题描述】:

我正在使用这个插件:https://github.com/litehelpers/Cordova-sqlite-storage

在进行数据库事务时,我的项目中遇到了上述问题。实际上我的项目中有很多事务同时来自 js 以及 java 端。

下面是我的代码(只有一个查询):

function createTable(latWS,longWS,empId) {

        window.sqlitePlugin.openDatabase({name: 'test.db', location: 'default'}, function(db) {
        db.transaction(function(tx) {
            tx.executeSql('CREATE TABLE IF NOT EXISTS test (loc_emp_lat, loc_emp_long, loc_emp_accuracy, loc_emp_local_time)');
        }, function(err) {
            console.log('Open database ERROR: ' + JSON.stringify(err));
        });
      });
        setTimeout(insertIntoLogTable(latWS,longWS,empId),500);
    }

我已经检查过了,它没有出现错误消息。

我正在使用版本: cordova-sqlite-storage 1.4.7 "Cordova s​​qlite 存储插件"

我的 Cordova Android 版本是:4.1.1

【问题讨论】:

  • 你解决过这个问题吗?我也得到新的交易排队,等待开放操作完成

标签: android sqlite cordova


【解决方案1】:

我在 Android 上使用 react-native-sqlite-storage(基于 Cordova-sqlite-storage)时遇到了同样的问题。

createFromLocation 参数负责把事情搞砸。在两个平台上仅使用 name 参数就足够了。

这是我在 Android 和 iOS 上使用的:

SQLite.openDatabase({ name: "dbname.sqlite"});

在 Android 7.0 上,数据库将保存到 /data/data/com.mypackage/databases/dbname.sqlite。

【讨论】:

    【解决方案2】:

    创建表之前需要使用延迟,例如:

     window.sqlitePlugin.openDatabase({name: 'test.db', location: 'default'});
    
     setTimeout(function(){
    tx.executeSql('CREATE TABLE IF NOT EXISTS test (loc_emp_lat, loc_emp_long, loc_emp_accuracy, loc_emp_local_time)');
    
    },4000);
    

    【讨论】:

    • 即使超时,问题仍然存在。
    猜你喜欢
    • 2020-02-04
    • 2020-03-26
    • 2021-02-21
    • 2021-11-13
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    • 2015-02-02
    相关资源
    最近更新 更多