Теперь у меня есть странная проблема, я сделал все виды тестов, и я считаю, что вижу что-то странное.Столбец не создан в таблице SQLITE3
создать три таблицы в SQLiteOpenHelper:
public void onCreate(SQLiteDatabase db) {
try {
db.execSQL(TABLE_CHANNELS_CREATE);
db.execSQL(TABLE_FEEDS_CREATE);
db.execSQL(TABLE_FEEDMAP_CREATE);
}
catch (SQLiteException e){
Toast.makeText(mContext, e.getMessage(), Toast.LENGTH_LONG).show();
}
}
Оператор CREATE заявления для трех таблиц следуют:
CREATE TABLE IF NOT EXISTS IRChannels (
ChannelId INTEGER PRIMARY KEY,
ChannelHash TEXT NOT NULL,
ChannelTitle TEXT NOT NULL,
ChannelDesc TEXT, ChannelLink TEXT);
CREATE TABLE IF NOT EXISTS IRFeeds (
FeedId INTEGER PRIMARY KEY,
FeedHash TEXT NOT NULL,
FeedTitle TEXT NOT NULL,
FeedDescription TEXT,
FeedLink TEXT);
CREATE TABLE IF NOT EXISTS IRFeedMap (
ChannelHash_FK TEXT NOT NULL,
FeedHash_FK TEXT NOT NULL,
FOREIGN KEY (ChannelHash_FK) REFERENCES IRChannels (ChannelHash),
FOREIGN KEY (FeedHash_FK) REFERENCES IRFeeds (FeedHash));
Проблема, по-видимому столбец FeedHash
в IRFeeds
не создается в то время как другие. Я смотрю вывод в командной строке sqlite3;
sqlite> .schema
CREATE TABLE IRChannels (
ChannelId INTEGER PRIMARY KEY,
ChannelHash TEXT NOT NULL,
ChannelTitle TEXT NOT NULL,
ChannelDesc TEXT,
ChannelLink TEXT);
CREATE TABLE IRFeedMap (
ChannelHash_FK TEXT NOT NULL,
FeedHash_FK TEXT NOT NULL,
FOREIGN KEY (ChannelHash_FK) REFERENCES IRChannels (ChannelHash),
FOREIGN KEY (FeedHash_FK) REFERENCES IRFeeds (FeedHash));
CREATE TABLE IRFeeds (
FeedId INTEGER PRIMARY KEY,
FeedHash TEXT NOT NULL,
FeedTitle TEXT NOT NULL,
FeedDescription TEXT,
FeedLink TEXT);
Это перечисляют FeedHash
столбец в IRFeeds
. Однако, когда я выполняю
sqlite> select * from IRFeeds where FeedHash='';
SQL error: no such column: FeedHash
Все остальные столбцы не дают таких ошибок. Это условие также приводит к неожиданному сбою моего кода. Что я могу пропустить?
sqlite> select * from IRFeeds where FeedID=1;
sqlite> select * from IRFeeds where FeedTitle='';
sqlite> select * from IRFeeds where FeedDescription='';
sqlite> select * from IRFeeds where FeedLink='';
выше, когда я исполняю select
заявление для других столбцов Нет ошибок.
Интересно, что 'QUESTOID SQLLite Manager' (http://jaxenter.com/manage-sqlite-for-android-11339.html) дает следующую ошибку при попытке открыть мою базу данных: 'Не удалось создать представление: [строка 1:58] нет жизнеспособной альтернативы в character '' CREATE TABLE IRFeeds (FeedId INTEGER PRIMARY KEY, FeedHash TEXT NOT NULL, FeedTitle TEXT NOT NULL, FeedDescription TEXT, FeedLink TEXT) ' –
Обнаружил эту тему (http://code.google.com/p/android/issues/деталь? ID = 1732). Не уверен, что то, что я вижу, связано, но все же помогает. –
Вздох! Очень странно. Если я вручную 'drop irfeeds' и' create table irfeeds (...) ', тогда выполните мой код, все будет работать так, как ожидалось. Удивительно, если это имеет какое-то отношение к тому, что я создаю несколько таблиц в SQLiteOpenHelper.onCreate. –