在Web-SQL中使用变量

时间:2016-12-02 12:47:49

标签: javascript html sql web-sql

此代码必须提醒我添加到表中的内容。他并没有提醒变量" 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>

感谢您的所有答案! 恋爱, 德克斯特

2 个答案:

答案 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值正常。

我认为插入值时出错,这就是为什么它不会被警告。