Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何创建以_id作为复合主键的表?_Android_Sqlite - Fatal编程技术网

Android 如何创建以_id作为复合主键的表?

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作为自动增量

我是android sqlite的新手

问题:

创建一个包含三列(即column1、column2和column3)的表,所有列的类型均为TEXT。column1和column2应一起构成一个复合主键。此外,此表将由CursorAdapter使用。因此,有必要创建一个
\u id
字段

到目前为止:

  • 能够使用以下查询创建一个没有_id、列1和列2为主键的表:

    创建表测试(column1文本、column2文本、column3文本、主键(column1、column2))

  • 能够使用_id作为自动增量创建表

    CREATE TABLE Test(_idinteger主键自动递增,column1 TEXT,column2 TEXT,column3 TEXT)

但我无法将两者结合起来

我尝试了以下查询,但都出现了错误:

1>
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
之外还有哪些类型适用于此,因为我还没有尝试过它们。