javascript - 在普通桌面浏览器中测试时如何将 sqlite 与 cordova 一起使用?

标签 javascript android angularjs sqlite cordova

在开发我的 Cordova 混合应用程序时,我已经非常习惯于在常规桌面浏览器中测试我的应用程序,到目前为止效果非常好。

现在我想将 sqlite 功能添加到我的应用程序中。我看到有一个用于 cordova 的插件,但我很好奇,我如何编写一个回退,以便如果没有使用 cordova,我可以自然地使用 sqlite 而无需使用 cordova 插件?理想情况下,我希望它被抽象化,以便 native sqlite 对象的行为与插件完全一样,这样我就可以在常规浏览器中进行所有测试,以最大限度地减少我必须将应用程序安装到实际设备的次数- android 的构建时间很长,所以我想尽可能避免它。

谢谢!

最佳答案

您可以使用一个简单的包装器,该包装器将 WebSQL 用于浏览器,将 SQLite 用于设备。只需使用不同的数据库对象。 WebSQL 和 SQLite API 几乎相同。您只需要对浏览器和设备进行不同的初始化。

这是我的示例代码(ES6):

var runiOS = false;
var DB;

// Check browser or device

var onDeviceReady = new Promise(function(resolve, reject) {    
    if (document.URL.match(/^https?:/i)) {
        console.log("Running in a browser...");
        resolve();
    } else {
        console.log("Running in an app...");
        runiOS = true;
        document.addEventListener("deviceready", resolve, false);
    }
});

// Run application
onDeviceReady.then(function() {
    //  Init WebSQL on browser or SQLite on device
    if (runiOS) {
        DB = window.sqlitePlugin.openDatabase({ name: 'my.db', location: 'default' }, function (db) {}, function (error) { console.log('Open database ERROR: ' + JSON.stringify(error)); });          
        console.log('DB: SQLite');
    }
    else {
        DB = window.openDatabase('my', "0.1", "My list", 200000);    
        console.log('DB: WebSQL');
    }

    // ...

    db.transaction(function(tx) {
        tx.executeSql('CREATE TABLE IF NOT EXISTS DemoTable (name, score)');
        tx.executeSql('INSERT INTO DemoTable VALUES (?,?)', ['Alice', 101]);
        tx.executeSql('INSERT INTO DemoTable VALUES (?,?)', ['Betty', 202]);
    }, function(error) {
        console.log('Transaction ERROR: ' + error.message);
    }, function() {
        console.log('Populated database OK');
    });


    db.transaction(function(tx) {
        tx.executeSql('SELECT count(*) AS mycount FROM DemoTable', [], function(tx, rs) {
            console.log('Record count (expected to be 2): ' + rs.rows.item(0).mycount);
        }, function(tx, error) {
            console.log('SELECT error: ' + error.message);
        });
    });
});

关于javascript - 在普通桌面浏览器中测试时如何将 sqlite 与 cordova 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28817347/

相关文章:

javascript - jQuery:选择器不适用于 ajax 加载的内容

android - RelativeLayout params AddRule 是否始终有效?

javascript - 如何计算不同 DPI 下图像每英寸的像素数?

javascript - ANGULARJS 用空数组填充数组对象

javascript - 如何使用函数的参数来使用对象的数据?

javascript - 无法使用javaScript在HTML中打印特定字符串

javascript - firebase firestore离线持久性FirebaseError

安卓 : Can bind to a service but cannot receive instance variables

javascript - Angular Forms - 如何使用动态名称注册输入?

javascript - 在javascript中将字符串解析为html