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