Javascript 如何在Cordova中压缩SQL指令?

Javascript 如何在Cordova中压缩SQL指令?,javascript,cordova,local-storage,Javascript,Cordova,Local Storage,我正在制作一个使用数据库的微型应用程序,我想知道如何转换: 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

我正在制作一个使用数据库的微型应用程序,我想知道如何转换:

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");
}
函数testDB()
{
var db=window.openDatabase(“数据库”,“1.0”,“mydatabase”,2000000);
数据库事务(queryNames,errorDB);
}
函数查询名称(tx)
{
tx.executeSql('从id=13'的人员中选择姓名,[],列表名,errorDB);
}
函数列表名称(发送、结果)
{

对于(var i=0;i我建议这样做。创建一个单独的数据库对象,该对象只有一个通用查询方法。这样,您就可以从应用程序中的任何其他位置重用它。类似于以下内容:

以下是数据库对象:

var DB = function () {
    this.db = window.openDatabase("Database", "1.0", "mydatabase", 2000000);
};

DB.prototype.error = function () {
    alert("Fatal Error");
};

DB.prototype.query = function (query, callback) {
    this.db.transaction(function (tx) {
        tx.executeSql(query, [], function (tx, results) {
            callback(results);
        });
    }, this.error); 
};
现在您可以调用它来执行名称查询,如下所示:

var myDB = new DB();
var namesQuery = 'SELECT name FROM people WHERE id=13';

myDB.query(namesQuery, function (results) {
    for (var i=0;i<results.rows.length;i++) {
        alert(results.rows.item(i).name);
    }
});
var myDB=newdb();
var namesQuery='从id=13的人员中选择姓名';
myDB.query(名称查询、函数(结果){

对于(var i=0;iSQLite调用是一个事件。我使用jQuery创建了以下函数(该函数还将结果记录在控制台中,因此您需要控制台插件才能工作):

函数调用为:

$.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
});

你的代码是否能像现在这样工作?我之所以问这个问题,是因为它看起来像你的
queryNames
将事务作为它的第一个参数,但当你调用它时,你传递的是一个字符串。一旦我知道了这一点,我可以帮你解决。@Jrd第一个例子有效,第二个则不行,这是一种我想减少的例子,我不知道如何减少回收代码,我想将SQL作为参数传递,这是调用函数的命令?我的意思是相当于
testDB();
这样我就可以调用它来测试你的代码了。第二个块中的代码就是测试它的代码。如果你愿意,你可以将所有这些都封装在一个
testDB
函数中并调用它。谢谢,我会试试!我的调试器在另一个JavaScript库中发现一个错误,我会尝试找出问题。哇,它看起来不错,我会试试的!完美+1,但是pl请简单地告诉我什么是
when
deferred
。Thx用于向上投票。deferred是一种«收集»回调的方法。请查看文档:和
$.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
});