此代码必须提醒我添加到表中的内容。他并没有提醒变量" hallo"的价值。你知道这段代码中有什么问题吗?
<html>
<body>
<script>
var db = openDatabase('neueDb', '1.0', "Test DB", 2 * 1024 * 1024);
var hallo = "hallo1234";
db.transaction(function (tx) {
tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (log)');
tx.executeSql('INSERT INTO LOGS (log) VALUES ("foobar")');
tx.executeSql('INSERT INTO LOGS (log) VALUES ("logmsg")');
tx.executeSql('INSERT INTO LOGS (log) VALUES (?)', hallo);
});
db.transaction(function (tx) {
tx.executeSql('SELECT * FROM LOGS', [], function (tx, results) {
var len = results.rows.length, i;
for (i = 0; i < len; i++) {
alert(results.rows.item(i).log);
}
}, null);
});
</script>
</body>
感谢您的所有答案! 恋爱, 德克斯特
答案 0 :(得分:1)
您错过了db.transaction异步的想法。
您希望首先插入所有行,然后选择它们。那不是实际发生的事情。
这是你需要的:
b.transaction(function (tx) {
tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (log)');
tx.executeSql('INSERT INTO LOGS (log) VALUES ("foobar")');
tx.executeSql('INSERT INTO LOGS (log) VALUES ("logmsg")');
tx.executeSql('INSERT INTO LOGS (log) VALUES (?)', [hallo]);
tx.executeSql('SELECT * FROM LOGS', [], function (tx, results) {
var len = results.rows.length, i;
for (i = 0; i < len; i++) {
alert(results.rows.item(i).log);
}
}, null);
});
当然tx.executeSql('SELECT * FROM LOGS'
理想情况下应该包含在另一个函数中。
另请注意@Jorge关于您使用的语法的评论。
答案 1 :(得分:1)
对我来说,在Chrome中执行tx.executeSql('INSERT INTO LOGS (log) VALUES (?)', hallo);
VM109:1 Uncaught TypeError: Failed to execute 'executeSql' on 'SQLTransaction': The 2nd argument is neither an array, nor does it have indexed properties.(…)
我不知道为什么,我之前从未遇到过这个错误。但是,如果我db.transaction(function (tx) { tx.executeSql('INSERT INTO LOGS (log) VALUES (?)', [hallo]); })
它正常工作,则警报显示hallo
值正常。
我认为插入值时出错,这就是为什么它不会被警告。