2014-09-29 55 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到自动增量列。

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," + 
           BOOK + " TEXT," + 
           CAR + " TEXT)"; 

的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

这是一个功能,而不是一个错误 – 2014-09-29 16:49:15

回答

2

您可以指定WITHOUT ROWID,但您仍然需要PRIMARY KEY

例如:

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

这需要源码3.8.2或更新的版本。这个问题也被标记为,所以有可能the sqlite version on your Android device年龄较大。

扩展阅读:http://www.sqlite.org/withoutrowid.html

+0

换句话说,它必须具有AUTOINCREMENT列?谢谢 – YRTM2014 2014-09-29 17:05:57

+0

它必须有一个'PRIMARY KEY',但它并不一定是'INTEGER PRIMARY KEY'或'INTEGER PRIMARY KEY AUTOINCREMENT'。 – laalto 2014-09-29 17:23:00

+0

我已更新我的问题。我已经尝试过“没有流行”,但它是强制关闭。这可能是因为SQLite版本。谢谢 – YRTM2014 2014-09-29 18:04:16