我正在使用 Cordova/Phonegap 2.2.0 构建一个小型测试应用程序
该应用程序初始化并使用 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);
}