我有一个由sqlite表支持的ContentProvider。所以为了创建我的表,我使用了
public class H extends SQLiteOpenHelper {
@Override
public void onCreate(SQLiteDatabase sqliteDatabase) {
…// here I defined my original table without constraints
}
}
最初创建时,表格包含以下列:名称,年龄,高度。没有限制。什么都没有。
现在我需要为表添加约束。所以我增加了DATABASE_VERSION,然后在onCreate String中添加了UNIQUE(name,age) ON CONFLICT REPLACE
。
我的问题是,我应该在onUpgrade
方法中做些什么?更简单地说:如何仅仅为了添加约束而调用ALTER TABLE
?我的尝试失败了
ALTER TABLE myTable ADD UNIQUE(name,age) ON CONFLICT REPLACE
以下是错误消息:
Caused by: android.database.sqlite.SQLiteException: near "CONSTRAINT": syntax error (code 1): , while compiling: ALTER TABLE myTable ADD CONSTRAINT UNIQUE(name,age) ON CONFLICT REPLACE
#################################################################
Error Code : 1 (SQLITE_ERROR)
Caused By : SQL(query) error or missing database.
(near "CONSTRAINT": syntax error (code 1): , while compiling: ALTER TABLE myTable ADD CONSTRAINT UNIQUE(name,age) ON CONFLICT REPLACE)
答案 0 :(得分:0)
您无法在SQLite中添加{{1}}的约束。
仅ALTER TABLE的RENAME TABLE和ADD COLUMN变体 支持命令。其他种类的ALTER TABLE操作如 DROP COLUMN,ALTER COLUMN,ADD CONSTRAINT等被省略。
答案 1 :(得分:0)
更改表格在sqlite中相当有限。但是,出于您的目的CREATE UNIQUE INDEX同样适用。
通常,创建唯一约束与创建唯一索引之间没有区别。请参阅:
SQLite - Any difference between table-constraint UNIQUE & column-constraint UNIQUE? https://dba.stackexchange.com/questions/144/when-should-i-use-a-unique-constraint-instead-of-a-unique-index
因此,在您的情况下,更改要使用的代码应该更改onCreate中的代码以使用CREATE INDEX语法。
请注意,如果您的桌子已经有重复的条目,这可能仍会失败。