2014-08-31 2 views
1

코드 아래 이건 내 데이터베이스 스키마 및 인 실행 onCreate 방법 후이 오류가 얻을 :안드로이드 SQLite는 테이블이 하나 이상의 기본 키

private static final String DATABASE_CREATE = "CREATE TABLE " + RECEIVE_FIELDS_TABLE + "(" 
     + COLUMN_ID +   " INTEGER PRIMARY KEY AUTOINCREMENT, " 
     + COLUMN_LASTID +  " INTEGER , " 
     + COLUMN_SMSNUMBER +  " VARCHAR , " 
     + COLUMN_MOBILENUMBER + " VARCHAR , " 
     + COLUMN_SENDERNAME + " VARCHAR , " 
     + COLUMN_SMSBODY +  " TEXT , " 
     + COLUMN_RECEIVEDATE + " VARCHAR , PRIMARY KEY (" + COLUMN_ID + "));"; 

Log.i 결과 :

08-28 08:13:23.984 3214-3214/ir.tsms E/Database﹕ Failure 1 (table "ReceiveFields" has more than one primary key) on 0x1175f8 when preparing 'CREATE TABLE ReceiveFields(id INTEGER PRIMARY KEY AUTOINCREMENT, lastId INTEGER , smsNumber VARCHAR , mobileNumber VARCHAR , senderName VARCHAR , smsBody TEXT , receiveDate VARCHAR , PRIMARY KEY (id));'. 

데이터베이스 스키마 변수를 만듭니다 DATABASE_CREATE :

CREATE TABLE ReceiveFields(

    id INTEGER PRIMARY KEY AUTOINCREMENT, 
    lastId INTEGER , 
    smsNumber VARCHAR , 
    mobileNumber VARCHAR , 
    senderName VARCHAR , 
    smsBody TEXT , 
    receiveDate VARCHAR , 
    PRIMARY KEY (id) 

); 

개 내 테이블에 문제가 생겼어? 감사합니다

+2

는 'PRIMARY KEY' 절 중 하나를 꺼내. – Henry

답변

0

DATABASE_CREATE 쿼리 문자열의 끝에서 PRIMARY KEY (" + COLUMN_ID + ")을 삭제하십시오.
은 당신의 코드를 변경 :

private static final String DATABASE_CREATE = "CREATE TABLE " + RECEIVE_FIELDS_TABLE + "(" 
    + COLUMN_ID +   " INTEGER PRIMARY KEY AUTOINCREMENT, " 
    + COLUMN_LASTID +  " INTEGER , " 
    + COLUMN_SMSNUMBER +  " VARCHAR , " 
    + COLUMN_MOBILENUMBER + " VARCHAR , " 
    + COLUMN_SENDERNAME + " VARCHAR , " 
    + COLUMN_SMSBODY +  " TEXT , " 
    + COLUMN_RECEIVEDATE + " VARCHAR);"; 
+1

내 'COLUMN_ID'에 'PRIMARY KEY'가 있어야겠습니까? –

+1

가능합니다. 필드를 정의 할 때'PRIMARY KEY' 문을 삽입하기 만하면됩니다. 예를 들어 다음을 사용할 수 있습니다 :'... COLUMN_ID INTEGER PRIMARY KEY AUTOINCREMENT ...' – SerCna

관련 문제