我正在制作一个将使用数据库的小型应用程序,我想知道如何转换它:
function testDB()
{
var db = window.openDatabase("Database", "1.0", "mydatabase", 2000000);
db.transaction(queryNames, errorDB);
}
function queryNames(tx)
{
tx.executeSql('SELECT name FROM people WHERE id=13', [], listNames, errorDB);
}
function listNames(tx, results)
{
for (var i=0;i<results.rows.length;i++)
{
alert(results.rows.item(i).name);
}
}
function errorDB(err)
{
alert("Fatal error");
}
像这样的东西(如果可能更紧凑的话):
function testDB()
{
var db = window.openDatabase("Database", "1.0", "mydatabase", 2000000);
db.transaction(queryNames('SELECT name FROM people WHERE id=13'), errorDB);
}
function queryNames(tx, query)
{
tx.executeSql(, [],
function listNames(tx, results)
{
for (var i=0;i<results.rows.length;i++)
{
alert(results.rows.item(i).name);
}
},
errorDB);
}
function errorDB(err)
{
alert("Fatal error");
}
简而言之,我正在尝试“回收”代码。感谢您的阅读。
最佳答案
SQLite 调用是一个事件。我使用 jQuery 创建了以下函数(该函数还将结果记录在控制台中,因此您需要控制台插件才能工作):
var db = window.openDatabase("Database", "1.0", "mydatabase", 2000000);
function queryDB(query) {
var start = Date.now();
var deferred = $.Deferred();
db.transaction(function (tx) {
tx.executeSql(query, [], function (tx, results) {
console.log("Rows: " + results.rows.length + " Time: " + (Date.now() - start) + "ms Query: " + query);
deferred.resolve(results);
}, function (error) {
console.log("Error processing SQL: " + error.code + " " + error.no + " Query: " + query);
});
}, function (error) {
console.log("Transaction Error: " + error.code + " " + error.no + " Query: " + query);
});
return deferred.promise();
}
函数调用是:
$.when(queryDB("SELECT * FROM table")).done(function (results) {
// Here your logic with the results
});
这种方式的优点是,您可以同时调用多个查询:
$.when(queryDB("SELECT * FROM table1"), queryDB("SELECT * FROM table2")).done(function (results1, results2) {
// Here your logic with the results
});
关于javascript - 如何在 Cordova 中压缩 SQL 指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31866603/