2
我正在用Cordova/Phonegap 2.2.0構建一個小測試應用程序Cordova/Phonegap SQL數據插入重複
應用程序使用5條記錄初始化和填充數據庫。每個INSERT都是通過一個函數執行的,並且函數是從一個循環中調用的,這樣我可以很容易地改變記錄的數量。出於測試目的,邏輯條件決定記錄的id是奇數還是偶數,然後用適當的字符串填充詳細字段。因此,我應該有5個記錄插入,詳情如下:
(id) (detail)
(1) (This record is odd)
(2) (This record is even)
(3) (This record is odd)
(4) (This record is even)
(5) (This record is odd)
然而,當我檢索任何個人記錄數據,或所有記錄我總是得到「這個記錄是奇數」的細節:
(1) (This record is odd)
(2) (This record is odd)
(3) (This record is odd)
(4) (This record is odd)
(5) (This record is odd)
如果我改變回路中插入6條,然後我所有的研究結果表明「這個紀錄甚至」
因此,它是彷彿插入的最後細節值被應用到所有記錄。無論是或我沒有正確處理結果集。
下面的示例代碼,如果任何人都可以提供幫助。
非常感謝
// Create a reference to the database
function getDatabase() {
return window.openDatabase("productDB", "1.0", "Product Database", 200000);
// Run the onDeviceReady method
onDeviceReady();
populateDatabase();
// PhoneGap is ready
function onDeviceReady() {
db = getDatabase();
db.transaction(function(tx) {
tx.executeSql('DROP TABLE IF EXISTS products');
}, databaseError);
db.transaction(function(tx) {
tx.executeSql('CREATE TABLE IF NOT EXISTS products (id INTEGER PRIMARY KEY AUTOINCREMENT, product_text)');
}, databaseError);
}
// Run a select statement to pull out all records
function getAllItems() {
db.transaction(function(tx) {
tx.executeSql('SELECT * FROM products', [], queryAllSuccess, databaseError);
}, databaseError);
}
// Process the SQLResultSet
function queryAllSuccess(tx, results) {
var len = results.rows.length;
var output = '';
for (i=0; i<len; i++){
output = output + '<h2> ID ' + results.rows.item(i).id + '</h2>';
output = output + '<p>' + results.rows.item(i).product_text + '</p>';
}
messageElement.html(output);
}
// Populate the database
function populateDatabase() {
for (i=1; i<=5; i++)
{
insertProductItem(i);
}
}
// Insert record into the database
function insertProductItem(itemId) {
if (itemId % 2) {
var productText = "<p>Item " + itemId + " - This is an odd record</p>";
} else {
var productText = "<p>Item " + itemId + " - This is an even record</p>";
}
sql = 'INSERT INTO products (product_text) VALUES ("' + productText + '")';
db.transaction(function(tx) {
tx.executeSql(sql);
},databaseError);
}
請注意,我已經解決了這個問題。問題在於要插入字符串的串聯。我已更改爲使用佔位符,如下所示: sql ='INSERT INTO products(product_text)VALUES(?)'; db.transaction(function(tx){ tx.executeSql(sql,[productText]); },databaseError); –