2014-08-29 1 views
6

ID로 자동 증가하는 ID로 데이터베이스에 테이블을 만들려고하지만 AUTOINCREMENT 키워드를 쿼리에 추가하려고 할 때마다 :AUTOINCREMENT는 INTEGER PRIMARY KEY에서만 허용됩니다. - 안드로이드

@Override 
public void onCreate(SQLiteDatabase db) { 
    String sql = "CREATE TABLE IF NOT EXISTS " + TABLE_TASKS + " (" 
      + KEY_ID + "INTEGER PRIMARY KEY AUTOINCREMENT, " 
      + KEY_NOTETITLE + " TEXT, " + KEY_NOTECONTENT + " Text, " 
      + KEY_STATUS + " INTEGER)"; 
    db.execSQL(sql); 
} 

나는 또한 AUTO_INCREMENT B를 쓰기 위해 노력했다 :

AUTOINCREMENT 만 여기에 INTEGER PRIMARY KEY

에 허용하는 것은 내 쿼리입니다 그런 다음 구문 오류가있어.

나는 AUTOINCREMENT 단어를 제거하려고 할 때마다 정상적으로 작동하기 때문에 문제의 원인임을 알게되었습니다.

그래서 ... 문제는 무엇이라고 생각하십니까? 이 INTEGER 전에 일부 공간을 넣어 같은 테이블 만들기

답변

0

....

"CREATE TABLE "+TABLE_NAME+" ("+KEY_ID+" INTEGER PRIMARY KEY AUTOINCREMENT)"; 
18

당신은 그래서

+ KEY_ID + "INTEGER PRIMARY KEY AUTOINCREMENT, " 

을 변경 KEY_ID

INTEGER 사이에 공백을 추가해야

+ KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " 
4

정수 기본 키를 사용하여 테이블을 만듭니다. 명시 적으로 AUTOINCREMENT를 언급 할 필요가 없습니다.

CREATE TABLE t1(
    a INTEGER PRIMARY KEY, 
    C TEXT 
); 

Insert into t1(C) values("Hello"); 
+0

자동 증가 없음 sqlite는 삭제 된 ID를 재사용 할 수 있습니다. –

+0

@loshadvtapkah PRIMARY KEY는 마지막 행 id보다 큰 사용되지 않는 정수를 사용합니다. source : https://www.sqlite.org/autoinc.html –

+0

@RameshKumar 예, 그렇다고해서 다시 ID를 사용하지 않는다는 의미는 아닙니다. 상위 ID를 사용하여 여러 레코드를 제거하면 재사용됩니다. 대부분의 경우 문제가되지 않지만 응용 프로그램이 외래 키 검사를 추적하는 경우에도 다른 버그로 인해 하나의 버그가 발생하지 않도록 키를 다시 사용하지 않는 것이 좋습니다. –