2011-12-28 5 views
0

이제는 이상한 문제가 있습니다. 모든 종류의 테스트를 완료했으며 이상한 것을보고 있습니다.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)); 

문제는 분명히 다른 사람들이 동안 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); 

IRFeedsFeedHash 열을 나열 않습니다. 그러나 실행할 때

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 문을 실행하면 위 오류는 발생하지 않습니다.

+0

흥미롭게도 내 상황에 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) ' –

+0

이 스레드를 찾았습니다. (http://code.google.com/p/android/issues/detail? id = 1732). 내가 보는 것이 관련되어 있지만 여전히 도움이되는지 확실하지 않습니다. –

+0

한숨! 참으로 이상합니다. 내가 수동으로'irfeeds를 떨어 뜨리고''테이블 irfeeds (...)를 만든 다음 내 코드를 실행하면 모든 것이 예상대로 작동한다. 이것이 SQLiteOpenHelper.onCreate에서 여러 테이블을 생성한다는 사실과 관련이 있는지 궁금해 할 것입니다. –

답변

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)); 

그리고 voila! 정이 회복되었습니다. 나를 때려. 나는 (이었다 열) SQLite는 예약어

나는이 SO 질문에 결국 사용하던 내 경우

1

SQL에 오류가 없습니다. 나는 시험을했고 모든 것이 제대로 만들어졌습니다. 또한 SQL 쿼리로 인해 no such column 오류가 발생하지 않았습니다. 따라서 context.deleteDatabase(databaseName);으로 데이터베이스를 삭제하고 다시 시도하십시오.

+0

DDMS를 사용하여 여러 번 데이터베이스를 삭제했습니다. 이제 전체 재부팅을 해봅시다. 당신의 도움을 주셔서 감사합니다. –

+0

Nope. 재부팅 및 "사용자 데이터 지우기"가 도움이되지 않았습니다. 나는 에뮬레이터에서 실행 중이다. 무엇이 잘못 될 수 있는지 궁금합니다. –

관련 문제