【问题标题】:Why does SQLite Database rowid created by itself? Android为什么 SQLite 数据库的 rowid 是自己创建的?安卓
【发布时间】:2014-11-24 03:16:45
【问题描述】:

有没有办法创建没有 AUTOINCREMENT 列的表?

我已经尝试过此链接中的解决方案,但它对我不起作用。 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 列。

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 版本?

【问题讨论】:

  • 这是一个特性,而不是一个错误

标签: mysql database sqlite android-sqlite auto-increment


【解决方案1】:

您可以指定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

【讨论】:

  • 换句话说,它必须有 AUTOINCREMENT 列?谢谢
  • 它必须有一个PRIMARY KEY,但它不一定是INTEGER PRIMARY KEYINTEGER PRIMARY KEY AUTOINCREMENT
  • 我已经更新了我的问题。我试过用“WITHOUT ROWID”,但它是强制关闭的。这可能是因为 SQLite 版本。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-09
  • 1970-01-01
相关资源
最近更新 更多