今私は奇妙な問題があります。私はあらゆる種類のテストを行いました。SQLITE3テーブルでカラムが作成されていない
私はSQLiteOpenHelperで3つのテーブルを作成:3つのテーブルが従うためのCREATE文
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 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'を他の人に役立ちます(http://jaxenter.com/manage-sqlite-for-android-11339.html)私のデータベースを開こうとすると、次のエラーが表示されます。 'ビューを作成できませんでした:[行1:58]文字 '' 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/detail?id = 1732)。私が見ているものが関連しているかどうかは分かりませんが、それでも役立ちます。 –
一発!確かに非常に奇妙です。手動で 'irfeedsを落とす'と 'テーブルirfeeds(...)'を作成し、私のコードを実行すると、すべてが期待どおりに動作します。これがSQLiteOpenHelper.onCreateで複数のテーブルを作成しているという事実と関係があるのだろうかと思います。 –