【发布时间】:2012-03-29 16:44:32
【问题描述】:
现在我有一个奇怪的问题,我做了各种测试,我相信我看到了一些奇怪的东西。
我在 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));
问题显然是IRFeeds 中的列FeedHash 没有创建,而其他列是。我正在查看 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);
这确实列出了IRFeeds 中的FeedHash 列。但是,当我执行时
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(jaxenter.com/manage-sqlite-for-android-11339.html) 在我尝试打开数据库时出现以下错误:Could not create the view: [line 1:58] no viable alternative at character ' ' CREATE TABLE IRFeeds (FeedId INTEGER PRIMARY KEY, FeedHash TEXT NOT NULL, FeedTitle TEXT NOT NULL, FeedDescription TEXT, FeedLink TEXT) -
找到这个话题 (code.google.com/p/android/issues/detail?id=1732)。不确定我看到的是否相关,但仍然有帮助。
-
叹息!确实很奇怪。如果我手动
drop irfeeds和create table irfeeds (...)然后执行我的代码,一切都会按预期工作。想知道这是否与我在 SQLiteOpenHelper.onCreate 中创建多个表的事实有关。 -
找到了一个较新的线程stackoverflow.com/questions/8663717/…,它似乎有类似的问题。还是没有运气!