我喜欢让事情变得很简单,所以我使用的功能数量有限,在可以接收参数的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);
}
就让我们通过它走。很明显,一个接收参数的标准函数可以是任何东西,在这种情况下也是一个对象以及一个字符串。
sqlTxt是乐趣开始的地方。按照通常写入插入语句的方式写入,但通常在VALUES中使用?要将数据传递到数据库表中的每个字段的占位符。
现在,让我们打破了下一行:
db.transaction(function(tx) {tx.executeSql(sqlTxt,[val1,val2,val3])}, errorCB, successCB);
当您创建一个新的数据库,db是处理程序的数据库对象,以便db.transaction要求对数据库DB执行事务。
如果我们这样写下一个下一节,您可以看到它的函数调用tx.executeSql,并且因为它在执行db.transaction方法时会通过db句柄。
function(tx) {
tx.executeSql(sqlTxt,[val1,val2,val3])
}
现在如果我们解析SQLTXT它可能看起来像这样
INSERT INTO demo (geo1, geo2, geo3) VALUES ('a', 'b', 'c');
因为我们传递三个变量来代替的?持有人,它看起来像上面的行。最后你调用错误和成功回调函数。
在你的情况我会创造一个queryDB功能是这样的:
function queryDB(id) {
var sqlTxt = "SELECT * FROM DEMO WHERE id=?"
db.transaction(function(tx) {tx.executeSql(sqlTxt,[id])}, errorCB, successCB);
}
从本质上讲,功能抓起参数ID,它传递到查询的[ID]和执行,并返回错误或成功。显然你可以扩展这个以使用多个参数,或者如果你想要非常聪明,你只需创建一个单一的数据库事务函数,并传入sql和参数以用作对象或数组(本例中将在我的博客上)
所以确实在queryDB()函数我会得到价值与tx.id的ID? *我正在使用phonegap – cjmling 2012-01-08 07:18:11
就像我说的那样,这取决于phonegap的API(我没有使用它)。是'tx'你想传递给queryDB的值吗?或者您期望API填写的方法(如事务ID)。如果你想传递它,你可以使用上面详述的方法。 – JohnP 2012-01-08 07:30:02
'tx'可能是一个方法,API会填补我的猜测,http://dev.w3.org/html5/webdatabase/#sqltransactioncallback ....所以如果我想传递它,那么我如何检索值ID ..是由tx.id吗? – cjmling 2012-01-08 08:59:37