2012-11-26 33 views
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); 
} 
+0

請注意,我已經解決了這個問題。問題在於要插入字符串的串聯。我已更改爲使用佔位符,如下所示: sql ='INSERT INTO products(product_text)VALUES(?)'; db.transaction(function(tx){ tx.executeSql(sql,[productText]); },databaseError); –

回答

0

您必須插入語句搞亂,請詳細here插入語法。

請嘗試以下代碼:

// 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 (?)'; 
    db.transaction(function(tx) { tx.executeSql(sql, [productText]); }, 
     databaseError); 
    }