Sqlite (没有这样的专栏)。。但是,它就在那里

Sqlite (没有这样的专栏)。。但是,它就在那里,sqlite,web-sql,Sqlite,Web Sql,这是我的桌子: CREATE TABLE IF NOT EXISTS message_threads ( thread_id integer primary key autoincrement NOT NULL, user_id integer NOT NULL, last_checked timestamp NOT NULL DEFAULT '0', last_updated timestamp NOT NULL DEFAULT CURRENT_TIMESTA

这是我的桌子:

CREATE TABLE IF NOT EXISTS message_threads (
    thread_id integer primary key autoincrement NOT NULL,
    user_id integer NOT NULL, 
    last_checked timestamp NOT NULL DEFAULT '0',
    last_updated timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
)

CREATE TABLE IF NOT EXISTS messages (
    message_id integer primary key autoincrement NOT NULL,
    thread_id integer NOT NULL,message_type integer NOT NULL DEFAULT '0',
    message_content varchar(500) NOT NULL,
    message_date timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
    sent integer NOT NULL DEFAULT '0'
);
下面是我得到的错误:

Could not prepare statement (1 no such column: m.message_date)
这是我在MySQL中使用的查询,因为我在PHPMyAdmin中用一个虚拟表测试了它

SELECT * FROM messages m, message_threads t
    WHERE m.thread_id = t.thread_id
    ORDER BY t.last_updated, t.thread_id, m.message_date;
我正在使用WebSQL,我认为它是SQLite

完整的WebSQL代码

    $rootScope.database = openDatabase('application.db', '1.0', 'Application database', 1024 * 1024);
    $rootScope.database.transaction(function(tx) {
        tx.executeSql("CREATE TABLE IF NOT EXISTS message_threads (thread_id integer primary key autoincrement NOT NULL, user_id integer NOT NULL, last_checked timestamp NOT NULL DEFAULT '0', last_updated timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP);");
        tx.executeSql("CREATE TABLE IF NOT EXISTS messages (message_id integer primary key autoincrement NOT NULL,thread_id integer NOT NULL,message_type integer NOT NULL DEFAULT '0',message_content varchar(500) NOT NULL, message_date timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, sent integer NOT NULL DEFAULT '0');");

    });

    // Empty messages/threads for testing purposes
    $rootScope.database.transaction(function(tx) {
        tx.executeSql("DELETE FROM messages;");
        tx.executeSql("DELETE FROM message_threads;");
    });

    $rootScope.database.transaction(function(tx) {
        tx.executeSql("INSERT INTO message_threads (user_id) VALUES (?);", [0]);
        tx.executeSql("INSERT INTO messages (thread_id, message_content, sent) VALUES (?, ?, ?);", [1, "How are you doing?", 1]);
        tx.executeSql("INSERT INTO messages (thread_id, message_content) VALUES (?, ?);", [1, "Good you?"]);
    });

    $rootScope.database.transaction(function(tx) {
        tx.executeSql("SELECT * FROM messages m, message_threads t WHERE m.thread_id = t.thread_id ORDER BY t.last_updated, t.thread_id, m.message_date", [], function(tx, rs) {
            console.log(JSON.stringify(rs));
        }, function(tx, err) {
            alert("Error: " + err.message);
        });
    });

我应该补充一点,使用DBBrowser for SQLite查询可以很好地工作

我创建了一个新的sqlite数据库,并在windows 7上使用普通命令行sqlite.exe 3.8.0.2版测试了两个create查询。没有错误

然后我使用了SQLiteStudio 3.0.6版,输入了一些虚拟数据并执行了select查询。同样没有问题


我使用的工具只能处理sqlite。因此,在我看来,您的工具似乎存在一些配置问题。

很可能您的数据库有一个没有列的旧版本的表

CREATETABLE IF NOT EXISTS仅在不存在同名表的情况下创建具有给定规范的新表。它无法确保列在那里


若要修复此问题,请删除数据库文件,或在重新创建旧表之前使用DROP TABLE删除旧表。

SQLite不是MySQL的本地版本。@uuerdo-已删除的MySQL标记。由于您不是针对同一数据库测试查询,请确保上的websql/SQLite确实包含这些字段。我对sqlite还不太熟悉,无法给出比这更好的建议。什么会返回此查询?从消息m中选择m.message\u date,其中m.thread\u id=t.thread\u id ORDER BY t.last\u updated,t.thread\u id@C1sc0-相同的错误。