2015-01-09 149 views
0

我已经根据以下需要创建一个表:语法错误

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

  2. 因为我只想使用我自己的主键,所以我将列“条形码”设置为唯一的主键。

所以表看起来如下:

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

你能不能在这种情况下使用ROWID?它可以完成你所要求的所有内容,并且可以嵌入到大多数sqlite表格中 在你的查询中,只需从Z中选择X,Y,ROWID。

+0

ok,但是由于游标需要一个_id列来存在......如果我的表没有_id列创建,我该如何解决这个问题?使用rowid的别名?从Z选择X,Y,ROWID AS _ID?在这种情况下能够使用游标工作的正确方法是什么?所以我想那是没有必要为我的课实现BaseColumns,对吧? – user1624552