【问题标题】:Syntax error on creating android SQLite table in database在数据库中创建 android SQLite 表时出现语法错误
【发布时间】:2015-01-09 16:37:46
【问题描述】:

我根据以下需求创建了一个表:

  1. 稍后在我的代码中我使用游标,因此我在表中创建了一个列 _ID

  2. 因为我只想使用我自己的主键,所以我将我的列 'barcode' 设置为唯一的主键。

所以表格如下所示:

CREATE TABLE product (
_id INTEGER,
barcode TEXT PRIMARY KEY NOT NULL,
title TEXT NOT NULL,
categoryid INTEGER NOT NULL,
FOREIGN KEY (categoryid) REFERENCES category (_id) ON DELETE CASCADE)

上面的表是正确创建的,但我需要 _id 列自动递增,所以我修改表如下:

CREATE TABLE product (
_id INTEGER AUTOINCREMENT NOT NULL,
barcode TEXT PRIMARY KEY NOT NULL,
title TEXT NOT NULL,
categoryid INTEGER NOT NULL,
FOREIGN KEY (categoryid) REFERENCES category (_id) ON DELETE CASCADE)

调试我的应用程序时,出现以下错误:

near "AUTOINCREMENT": syntax error (code 1): , while compiling: 
CREATE TABLE product (_id INTEGER AUTOINCREMENT NOT NULL,barcode TEXT PRIMARY KEY NOT NULL,title TEXT NOT NULL,categoryid INTEGER NOT NULL, FOREIGN KEY (categoryid) REFERENCES category (_id) ON DELETE CASCADE)

我需要条形码列是唯一的主键,但 _ID 列同时是自动递增的。

我可以使用由 _ID 和条形码组成的复合主键,因此可以将 _ID 设置为自动增量而不会出现问题,但是这样做可以插入多个具有相同条形码(具有不同 _ID)的产品,并且我想要条形码在整个表中是唯一的。

那么如何摆脱它呢?

【问题讨论】:

    标签: android android-sqlite


    【解决方案1】:

    在这种情况下可以不使用 ROWID 吗?它可以满足您的所有要求,并且内置于大多数 sqlite 表中。 在您的查询中,只需从 Z 中选择 X、Y、ROWID。

    【讨论】:

    • 好的,但是由于游标需要存在 _id 列...如果我的表是在没有 _id 列的情况下创建的,我该如何解决这个问题?为rowid 使用别名?从 Z 中选择 X、Y、ROWID AS _ID?在这种情况下,它是能够使用游标的正确方法吗?所以我想我的班级没有必要实现 BaseColumns,对吧?
    【解决方案2】:

    来自链接:https://www.sqlite.org/autoinc.html,自动增量不能设置为非主字段,所以我认为您可以尝试以下解决方案,它可能会有所帮助:SQLite auto-increment non-primary key field

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多