Web Sql 选择语句无法提取第三列

Web Sql select statement not able to extract third column

本文关键字:三列 提取 选择 Sql 语句 Web      更新时间:2023-09-26

>演示

我无法检索使用警报框显示时显示未定义的行的第三个值。我基本上要实现的是将 4 行插入表格并根据需要根据列排序检索它们

.HTML

<div id="status" name="status">Status Message</div>

爪哇语

var db = openDatabase('mydb', '1.0', 'Test DB', 4 * 1024 * 1024);
var msg;
db.transaction(function (tx) {
    tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (id unique, log Text,log1 Text)');
    tx.executeSql('INSERT INTO LOGS (id, log,log1) VALUES (1, "foobar","sa")');
    tx.executeSql('INSERT INTO LOGS (id, log,log1) VALUES (2, "logmsg","da")');
    msg = '<p>Log message created and row inserted.</p>';
    document.querySelector('#status').innerHTML = msg;
});
db.transaction(function (tx) {
    tx.executeSql('SELECT * FROM LOGS', [], function (tx, results) {
        var len = results.rows.length,
            i;
        msg = "<p>Found rows: " + len + "</p>";
        document.querySelector('#status').innerHTML += msg;
        for (i = 0; i < len; i++) {
            msg = "<p><b>" + results.rows.item(i).log + "</b></p>";
            document.querySelector('#status').innerHTML += msg;
            var book = results.rows.item(i);
            console.log(book);
            alert(book.log1);
        }
    }, null);
});

在这里,我制作了一些与您非常相似的东西,并且在这里它正在工作。在这里,我的ID是这样的:

id 整数主键

所以当我做插入时,我不必使用它们,我让 web sql 来处理它

tx.executeSql('INSERT INTO LOGS (log,log1) VALUES ("logmsg","da")');

另外,我使用承诺(下面的代码使用angularJs

self.query = function(query, bindings) {
        bindings = typeof bindings !== 'undefined' ? bindings : [];
        var deferred = $q.defer();
        self.db.transaction(function(transaction) {
            transaction.executeSql(query, bindings, function(transaction, result) {
                deferred.resolve(result);
            }, function(transaction, error) {
                deferred.reject(error);
            });
        });
        return deferred.promise;
    };
    self.fetchAll = function(result) {
        var output = [];
        for (var i = 0; i < result.rows.length; i++) {
            output.push(result.rows.item(i));
        }
        return output;
    };
    self.fetch = function(result) {
        return result.rows.item(0);
    };

所以我可以这样使用它:

return DB.query('SELECT * FROM registro WHERE dia = ? and mes = ? and ano = ? order by horario', [dia, mes, ano])
        .then(function(result){
            return DB.fetchAll(result);
        });

我希望这能给你一些方向...

您的演示链接对我来说效果很好(使用 Chrome 39) - 运行后我收到"sa"、"da"警报。所以我认为这是特定于您的浏览器的东西,或者更可能是您的缓存。

您是否一开始创建了没有 log1 列的 LOG 表?也许它仍然存储在您的浏览器中,因为

CREATE TABLE IF NOT EXISTS LOGS (id unique, log Text,log1 Text)

行不会覆盖它。

在Chrome中,

您可以使用ChromeDevTools和"资源"选项卡检查浏览器的WebSQL模式保留,查看那里,看看mydb/LOGS表中是否有log1列和数据。