Android 如何创建以_id作为复合主键的表?
我是android sqlite的新手 问题: 创建一个包含三列(即column1、column2和column3)的表,所有列的类型均为TEXT。column1和column2应一起构成一个复合主键。此外,此表将由CursorAdapter使用。因此,有必要创建一个Android 如何创建以_id作为复合主键的表?,android,sqlite,Android,Sqlite,我是android sqlite的新手 问题: 创建一个包含三列(即column1、column2和column3)的表,所有列的类型均为TEXT。column1和column2应一起构成一个复合主键。此外,此表将由CursorAdapter使用。因此,有必要创建一个\u id字段 到目前为止: 能够使用以下查询创建一个没有_id、列1和列2为主键的表: 创建表测试(column1文本、column2文本、column3文本、主键(column1、column2)) 能够使用_id作为自动增量
\u id
字段
到目前为止:
- 能够使用以下查询创建一个没有_id、列1和列2为主键的表:
创建表测试(column1文本、column2文本、column3文本、主键(column1、column2))代码>
- 能够使用_id作为自动增量创建表
CREATE TABLE Test(_idinteger主键自动递增,column1 TEXT,column2 TEXT,column3 TEXT)代码>
CREATE TABLE Test(_idinteger AUTOINCREMENT,column1 TEXT,column2 TEXT,column3 TEXT,主键(_id,column1,column2))代码>
2> 创建表测试(_idinteger,column1 TEXT,column2 TEXT,column3 TEXT,主键(_idautoincrement,column1,column2))代码>
因此,请帮助我创建具有以下功能的表,即
- 应该有一个
\u id
自动递增字段
- 应在第1列和第2列上具有复合主键
因此,必须创建一个_id自动增量字段
不完全是。光标
需要一个唯一的\u id INTEGER
列。如果您有一个整型主键,则可以使用它。如果没有,请使用ROWID
:
SELECT ROWID AS _id, ...
其中,…
是查询的其余部分。这允许您不使用表模式,但仍然满足CursorAdapter
要求
(我多么希望谷歌早在2008年就指出这一点…试试这个
CREATE TABLE IF NOT EXISTS Test ( _id INTEGER, column1 TEXT, column2 TEXT, column3 TEXT, PRIMARY KEY(_id,column1,column2));
如果您使用ROWID方法,那么如果多个解析器同时调用您的提供者,您是否会面临竞争条件?例如,假设某个应用程序删除第5行,将所有rowid向下移动1。。如果在刷新数据集之前单击以更新同一行,则将结束对第6行的写入,因为您使用的是行号而不是唯一ID(由于SQLiteDatabase是线程安全的,所以ID将阻止此操作)。。如果这是真的,那么使用唯一ID可能很重要,即使它占用了一个额外的列。。想确定一下..BIGINT和VARCHAR呢?_id可以是INT以外的任何其他类型吗?@Turowicz:我不知道SQLite支持这些数据类型。除此之外,CursorAdapter
将尝试获取一个long
,我不知道除了INTEGER
之外还有哪些类型适用于此,因为我还没有尝试过它们。