Мне нравится держать вещи очень простыми, поэтому я использую ограниченное количество функций при обращении с хранилищем в приложениях телефонной заставки, которые могут получать параметры. Многие примеры, которые я видел, имеют призывы ко многим вспомогательным функциям, и для меня это кошмар, когда дело доходит до отладки.
Я был пойман ряд проблем вокруг 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 где начинается самое интересное. Напишите это, как обычно, выписываете инструкцию insert, но где вы обычно должны вставлять/выбирать данные и т. Д. В ЗНАЧЕНИЯ используйте ? Заполнитель для каждого поля в таблицах базы данных, в которые вы хотите передать данные.
Теперь давайте ломаются следующую строку:
db.transaction(function(tx) {tx.executeSql(sqlTxt,[val1,val2,val3])}, errorCB, successCB);
При создании новой базы данных, БД является обработчиком для объекта базы данных, поэтому db.transaction просит выполнить транзакцию на дб базы данных.
Если мы пишем следующий следующий раздел, как это вы можете увидеть это функция, которая вызывает tx.executeSql и потому, что в казнить внутри db.transaction метода , он будет передан в дб ручку.
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] и выполняется и возвращает ошибку или успех , Очевидно, вы можете расширить это, чтобы использовать несколько параметров, или если вы хотите быть действительно умными, вы просто создаете единую транзакционную функцию базы данных и передаете в sql и параметры для использования в качестве объекта или массива (пример будет в моем блоге в эти выходные)
так же в queryDB() функцию я достану значение идентификационного tx.id? * Я работаю над телефонной связью – cjmling
Как я уже сказал, это зависит от API phonegap (я его не использовал). это 'tx' значение, которое вы хотите передать в queryDB? или метод, который вы ожидаете от API-интерфейса (например, идентификатор транзакции). Если вы хотите передать его, вы можете использовать описанный выше метод. – JohnP
'tx' может быть методом, который api заполнит, я думаю, http: //dev.w3.org/html5/webdatabase/#sqltransactioncallback .... так что если я хочу передать его тогда, то как я получаю значение ID .. это tx.id? – cjmling