在数据库中创建android SQLite表时出现语法错误

时间:2015-01-09 16:37:47

标签: android android-sqlite

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

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

  2. 由于我只想使用自己的主键,因此我设置了我的专栏'条形码'作为唯一的主键。

  3. 所以表格如下所示:

    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)并且我想要条形码在整个表格中都是独一无二的。

    那么如何摆脱这个?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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