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-相同的错误。