gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 06:26:46 24 4
gpt4 key购买 nike

在开发我的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com