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); –