2012-11-26 32 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); 
    }