2014-09-23 2 views
1

복합 고유 인덱스 제약 조건을 사용하여 sqlite 데이터베이스에 테이블을 만들었습니다. 문제는 제약 조건이 적용되지 않는다는 것입니다. 동일한 고유 키 (col2 NOT NULL, col4) ("testvalue", NULL) 중 여러 행을 삽입 할 수 있습니다. documentation에 따르면NULL에 대해 고유 인덱스 제약 조건이 적용되지 않습니다.

, 그럼

For the purposes of UNIQUE constraints, NULL values are considered distinct from all other values, including other NULLs.

은 내가 어떻게 NULL 값을 갖는 고유 제한 조건을 적용합니까?

여기 내 테이블을 설명하는 클래스의 :

public class myTable{ 
    /*table name*/ 
    public static final String TABLE_NAME = "myTable"; 

    /*column names*/ 
    public static final String COLUMN_ID = "_id"; 
    public static final String COLUMN_1 = "col1"; 
    public static final String COLUMN_2 = "col2"; 
    public static final String COLUMN_3 = "col3"; 
    public static final String COLUMN_4 = "col4"; 

    /*create table script*/ 
    public static final String CREATE_TABLE = 
     "CREATE TABLE " + TABLE_NAME 
     + "(" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT" 
     + ", " + COLUMN_1 + " INTEGER" 
     + ", " + COLUMN_2 + " INTEGER NOT NULL" 
     + ", " + COLUMN_3 + " TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP" 
     + ", " + COLUMN_4 + " TEXT" 
     + ", FOREIGN KEY(" + COLUMN_2 + ") REFERENCES " + Table_other.TABLE_NAME + "(" + Table_other.COLUMN_ID + ")" 
     + ", FOREIGN KEY(" + COLUMN_1 + ") REFERENCES " + Table_yetanother.TABLE_NAME + "(" + Table_yetanother.COLUMN_ID + ")" 
     + ")"; 

    /*create index script */ 
    public static final String CREATE_INDEX = 
     "CREATE UNIQUE INDEX UIDX ON " + TABLE_NAME 
     + "(" + COLUMN_2 + "," + COLUMN_4 + ");"; 


} 
+0

참조 [NULL이 다른 데이터베이스 엔진 수스 SQLite는에 처리] (http://www.sqlite.org/nulls.html) 세부. –

+0

@ CL. 감사. 그거 좋은 기사 야. 나는 그것을 통해 갔지만 나는 여전히 해결책을 찾고있다. 나는 유일한 방법은 여기에있는 것 같아요 - http://stackoverflow.com/a/12095133/2105986 – faizal

답변

-1

SQLite는이 외래 키 제약 조건은 기본적으로 꺼져.

명시 적으로 다음을 수행하여 설정해야 : 이상

// Enable foreign key constraints 
if (!db.isReadOnly()) { 
    db.execSQL("PRAGMA foreign_keys = ON;"); 
} 
+0

이것은 질문에 대답하지 않습니다. –

+0

이것은 내 문제를 해결하지 못했지만 내 관심을 가지고 있습니다! 안드로이드의 SQlite 버전에서도 마찬가지입니까? 삽입 또는 데이터베이스를 만들거나 업데이트 할 때마다이 PRAGMA 명령을 실행합니까? – faizal

+1

@faizal [onCreate()]에서 [setForeignKeyConstraintsEnabled()] (http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#setForeignKeyConstraintsEnabled%28boolean%29)를 호출해야합니다 (http : //developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html#onConfigure%28android.database.sqlite.SQLiteDatabase%29). –

관련 문제