我是android sqlite的新手。
问题:
创建一个包含三列(即column1,column2和column3)的表,所有类型TEXT .Column1和Column2应该一起形成一个复合主键。此外,该表将由CursorAdapter使用。因此,创建_id
字段变得必要。
直到现在:
能够使用以下查询创建一个不带_id的表,其中column1和column2为PK:
CREATE TABLE Test ( column1 TEXT, column2 TEXT, column3 TEXT, PRIMARY KEY(column1,column2 ));
能够创建一个_id为AUTOINCREMENT
的表格 CREATE TABLE Test ( _id INTEGER PRIMARY KEY AUTOINCREMENT, column1 TEXT, column2 TEXT, column3 TEXT);
但我无法创建两者的组合。
我尝试了以下查询并且都给出了错误:
1> CREATE TABLE Test ( _id INTEGER AUTOINCREMENT, column1 TEXT, column2 TEXT, column3 TEXT, PRIMARY KEY(_id ,column1,column2 ));
2 - CREATE TABLE Test ( _id INTEGER , column1 TEXT, column2 TEXT, column3 TEXT, PRIMARY KEY(_id AUTOINCREMENT,column1,column2 ));
因此,请帮助我创建具有下述功能的表格,例如
_id
自动增量字段答案 0 :(得分:3)
因此,必须创建一个_id AUTOINCREMENT字段。
不完全是。 Cursor
需要一个唯一的_id INTEGER
列。如果你有INTEGER PRIMARY KEY
,你可以使用ROWID
。如果没有,请使用SELECT ROWID AS _id, ...
:
...
其中CursorAdapter
是查询的其余部分。这允许您单独保留表模式,但仍满足{{1}}要求。
(以及我希望谷歌在2008年再次指出这一点......)
答案 1 :(得分:0)
如果您使用ROWID方法,如果多个解析器立即呼叫您的提供商,您是否打开自己的竞争条件?例如,让我们说一些应用程序会删除第5行,将所有ROWID向下移动1 ..如果在数据集刷新之前单击更新同一行,您将最终写入行# 6,因为您使用的是行号而不是唯一的ID(ID会阻止这一点,因为SQLiteDatabase是线程安全的)。如果这是真的,使用唯一ID可能很重要,即使它占用了一个额外的列..想知道肯定..
答案 2 :(得分:-1)
试试这个,
CREATE TABLE IF NOT EXISTS Test ( _id INTEGER, column1 TEXT, column2 TEXT, column3 TEXT, PRIMARY KEY(_id,column1,column2));