【问题标题】:Error when creating a table in SQLite database with composite primary key at AUTOINCREMENT在 AUTOINCREMENT 处使用复合主键在 SQLite 数据库中创建表时出错
【发布时间】:2014-03-05 13:10:21
【问题描述】:

我的代码

    final String createtabBook="CREATE TABLE IF NOT EXISTS BookMark(lid INTEGER AUTOINCREMENT,  bookdir TEXT , lastaddress TEXT,addresname TEXT PRIMARY KEY(bookdir,lastaddress));";
    db.execSQL(createtabBook);

Logcat:

03-05 18:29:31.708: I/System.out(17160): android.database.sqlite.SQLiteException: near "AUTOINCREMENT": syntax error: , while compiling: CREATE TABLE IF NOT EXISTS BookMark(lid INTEGER AUTOINCREMENT,  bookpath TEXT , lastchapter TEXT, PRIMARY KEY(bookpath,lastchapter));

我只想创建一个具有复合主键的表,以便它是 bookdir 和 lastaddress 的组合,我还想将盖子设置为自动增量。

【问题讨论】:

标签: android sqlite


【解决方案1】:

要获取任何列自动增量的值,您需要编写它或将其声明为主键。

在 SQLite 中,声明为 INTEGER PRIMARY KEY 的列将自动递增

已编辑:

由于您不能在一个表中定义多个PRIMARY KEY,您必须将bookdir,lastaddress 列设置为UNIQUE,并将lid 列定义为PRIMARY KEY,如下所示:

尝试如下:

 final String createtabBook="CREATE TABLE IF NOT EXISTS BookMark(lid INTEGER PRIMARY KEY AUTOINCREMENT,  
  bookdir TEXT , lastaddress TEXT,addresname TEXT, UNIQUE(bookdir,lastaddress));";

还在查询中的addresname TEXT, 列之后添加","

【讨论】:

  • @laalto 现在我改变的问题是什么。
  • 考虑使用 sqlite3 之类的工具来检查您的语法。此外,还有关键字autoincrement,它在语法中有特定的位置。
  • @laalto 我确实改变了我的答案,现在它公平地撤销了你的投票。我现在已经检查过了。
猜你喜欢
  • 2015-10-08
  • 1970-01-01
  • 2017-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多