2015-10-09 6 views
1

Вот моих таблиц:(нет такого столбца) .. Но, это там

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 для SQLite.

+0

SQLite не является локальной версией MySQL. – Uueerdo

+0

@Uueerdo - Удаленный тег MySQL. – Hobbyist

+0

Поскольку вы не тестируете запрос в той же базе данных, убедитесь, что у websql/sqlite on действительно есть эти поля. Я недостаточно разбираюсь в sqlite, чтобы советовать лучше. – Uueerdo

ответ

0

Я создал новую базу данных sqlite и проверил оба ваших запроса на создание с помощью простой командной строки sqlite.exe версии 3.8.0.2 на окнах 7. Ошибок не было.

Затем я использовал SQLiteStudio Version 3.0.6 и ввел некоторые фиктивные данные и выполнил ваш запрос выбора. Опять никаких проблем.

Инструменты, которые я использовал, могут работать только с sqlite. Поэтому мне кажется, что с вашими инструментами возникают некоторые проблемы с настройкой.

1

Скорее всего, ваша база данных имеет более старую версию таблицы без столбца.

CREATE TABLE IF NOT EXISTS только создает новую таблицу с указанной спецификацией, если таблица того же имя не существует. Он ничего не делает, чтобы убедиться, что столбцы есть.

Чтобы исправить это, удалите файл базы данных или используйте DROP TABLE, чтобы избавиться от старых таблиц перед их воссозданием.

Смежные вопросы