从像这样的教程代码
function queryDB(tx) {
tx.executeSql('SELECT * FROM DEMO', [], querySuccess, errorCB);
}
function querySuccess(tx, results) {
}
function errorCB(err) {
alert("Error processing SQL: "+err.code);
}
var db = window.openDatabase("Database", "1.0", "PhoneGap Demo", 200000);
db.transaction(queryDB, errorCB);
Run Code Online (Sandbox Code Playgroud)
在db.transaction中我想将一个变量作为参数传递给queryDB函数,所以我想到的代码应该是这样的
db.transaction(queryDB(id), errorCB);
Run Code Online (Sandbox Code Playgroud)
我怎么能实际实现这个?或者它只是像这样工作,我的身份证将被传递并进入tx?
再次将其包裹在一个函数中
var id = 'THEID';
db.transaction(function(){
queryDB(id)
}, errorCB);
Run Code Online (Sandbox Code Playgroud)
注意 - 这是假设您正在制作API.某些API /框架会自动插入所需的信息.例如
//the db.transaction method
function transaction(param, callback) {
//do code stuff
callback(someInternalId); //callback is the function you pass as the first parameter
}
Run Code Online (Sandbox Code Playgroud)
因此,如果要在回调中传递自己的数据,请将其包装在函数中.否则,您使用的代码可能会自动为您执行此操作.
我喜欢保持简单,所以在处理可以接收参数的phonegap应用程序上的存储时,我使用有限数量的功能.我见过的很多例子都调用了很多子函数,对我来说,这在调试方面是个噩梦.
我遇到了围绕Web SQL的一些问题但是真正阅读这些规范,确实有助于澄清我能做什么和不能做什么.(http://www.w3.org/TR/webdatabase/)
查看插入函数的这个简单代码:
function dbInsert(param1, param2, dbObj) {
val1 = param1;
val2 = param2;
val3 = String(dbObj.item2);
var sqlTxt = "INSERT INTO demo (geo1, geo2, geo3) VALUES (?, ?, ?)";
db.transaction(function(tx) {tx.executeSql(sqlTxt,[val1,val2,val3])}, errorCB, successCB);
}
Run Code Online (Sandbox Code Playgroud)
让我们走过它.显然是一个标准函数,它接收可以是任何东西的参数,在这种情况下是一个对象以及一个字符串.
sqlTxt是有趣的开始.写这个就像你通常会写一个insert语句一样,但是你通常会在VALUES中插入/选择数据等等,使用?要将数据传入的数据库表中每个字段的占位符.
现在让我们分解下一行:
db.transaction(function(tx) {tx.executeSql(sqlTxt,[val1,val2,val3])}, errorCB, successCB);
Run Code Online (Sandbox Code Playgroud)
创建新数据库时,db是数据库对象的处理程序,因此db.transaction要求在数据库db上执行事务.
如果我们在下一节这样写下你可以看到它调用tx.executeSql的函数,并且因为它在db.transaction方法中执行,它将被传递给db句柄.
function(tx) {
tx.executeSql(sqlTxt,[val1,val2,val3])
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我们要解析sqlTxt,它可能看起来像这样
INSERT INTO demo (geo1, geo2, geo3) VALUES ('a', 'b', 'c');
Run Code Online (Sandbox Code Playgroud)
因为我们正在传递三个变量来代替?持有人,它看起来像上面的线.最后,您调用错误和成功回调函数.
在你的情况下,我将创建一个这样的queryDB函数:
function queryDB(id) {
var sqlTxt = "SELECT * FROM DEMO WHERE id=?"
db.transaction(function(tx) {tx.executeSql(sqlTxt,[id])}, errorCB, successCB);
}
Run Code Online (Sandbox Code Playgroud)
实质上,该函数获取参数id,将其传递给[id]中的查询并执行并返回错误或成功.显然你可以扩展它以使用多个参数,或者如果你想要非常聪明,你只需创建一个数据库事务函数并传入sql和参数以用作对象或数组(示例将在本周末在我的博客上)
| 归档时间: |
|
| 查看次数: |
16324 次 |
| 最近记录: |