2014-09-29 1 views
0

AUTOINCREMENT 열이없는 표를 만드는 방법이 있습니까?SQLite 데이터베이스 rowid가 자체적으로 만든 이유는 무엇입니까? Android

이 링크에서 솔루션을 사용해 보았지만 제대로 작동하지 않았습니다. prevent autoincrementing integer primary key?

public static final String KEY_ID = "ROW_ID";     
public static final String BOOK = "books";  
public static final String CAR  = "cars"; 
private static final String BOOK_CAR_TABLE = "BOOK_CAR_Table"; 
private static final String[] ALL_KEYS = new String[] {KEY_ID, BOOK, CAR}; 

private static final String BOOK_CAR_CREATE =   
"CREATE TABLE " + BOOK_CAR_TABLE + "("+ 
           KEY_ID + " INTEGER PRIMARY KEY," + 
           BOOK + " TEXT," + 
           CAR + " TEXT)"; 

은 내가 INTEGER PRIMARY KEY를 추가 할 때, 그것이 자동 증가 컬럼에 KEY_ID으로 바뀔 것이다 있음을 이해합니다.

AUTOINCREMENT rowid 열은 자체적으로 만들어졌으며 어떻게 발생 했습니까?

나는 AUTOINCREMENT 컬럼을 원하지 않는다.

어떻게 방지 할 수 있습니까? 추가 코드

private static final String BOOK_CAR_CREATE =   
"CREATE TABLE " + BOOK_CAR_TABLE + "("+ 
           KEY_ID + " INTEGER," + 
           BOOK + " TEXT," + 
           CAR + " TEXT) WITHOUT ROWID"; 

내가 이것을 시도하고 그것을 강제 가까이 :

편집 주셔서 감사합니다. 나는 그것 때문에 SQLite 버전의 것 같아?

+0

이 다른 단어의 기능이 아니라 버그 –

답변

2

WITHOUT ROWID을 지정할 수 있지만 여전히 PRIMARY KEY이 필요합니다. 예를 들어

는 :

CREATE TABLE "table"("key" TEXT PRIMARY KEY, "value" TEXT) WITHOUT ROWID 

이 SQLite는 3.8.2 이상이 필요합니다. 질문에 태그가 붙어 있으므로 the sqlite version on your Android device은 더 오래되었습니다.

추가 읽기 : http://www.sqlite.org/withoutrowid.html

+0

, 그것은 자동 증가 컬럼을 가지고 있어야한다? 감사합니다. – YRTM2014

+0

'PRIMARY KEY'가 있어야하지만 실제로는 'INTEGER PRIMARY KEY'또는 'INTEGER PRIMARY KEY AUTOINCREMENT'일 필요는 없습니다. – laalto

+0

내 질문을 업데이트했습니다. "WITH ROWID"로 시도했지만 강제로 닫습니다. 그것은 아마도 SQLite 버전 때문입니다. 감사 – YRTM2014