列未在SQLITE3表中创建

时间:2011-12-28 12:53:08

标签: android sqlite

现在我有一个奇怪的问题,我做过各种测试,我相信我看到了一些奇怪的东西。

我在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列未创建,而其他列则是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); 。我在sqlite3命令提示符下查看输出;

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

当我为其他列执行{{1}}语句时,没有错误。

3 个答案:

答案 0 :(得分:1)

SQL中没有错误。我测试了一切都是正确的。您的SQL查询也不会导致no such column错误。因此,请尝试使用context.deleteDatabase(databaseName);删除数据库,然后重试。

答案 1 :(得分:1)

经过一整天的奋斗,我设法找出问题触发的原因。仍然不知道为什么,但它确实解决了这个问题。出现问题是因为下表在其他两个表上有外键:

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 IRFeedMap (
    ChannelHash TEXT NOT NULL, 
    FeedHash TEXT NOT NULL, 
    FOREIGN KEY (ChannelHash) REFERENCES IRChannels (ChannelHash), 
    FOREIGN KEY (FeedHash) REFERENCES IRFeeds (FeedHash));

瞧!恢复了理智。打败我。

答案 2 :(得分:0)

在我的情况下,我使用的是SQLite保留字(列,那是)

我在这个问题中结束了,所以也许在我的情况下帮助其他人