Java 使两列在sqlite中唯一
我有一个有3列的表。列是Java 使两列在sqlite中唯一,java,sql,sqlite,android-sqlite,unique-constraint,Java,Sql,Sqlite,Android Sqlite,Unique Constraint,我有一个有3列的表。列是 BaseColumns._ID | NATIVE_CONTACT_ID | HIDDEN_TYPE 其中,BaseColumns.\u ID是主键。我想要的是,我不想允许开发人员将重复的值插入到NATIVE\u CONTACT\u ID中,如果他试图插入,那么与NATIVE\u CONTACT\u ID对应的HIDDEN\u TYPE列值的旧值应该被新值覆盖 让我向你进一步澄清。例如,我的表在插入几次后看起来是这样的 _ID | NATIVE_CONTACT_ID
BaseColumns._ID | NATIVE_CONTACT_ID | HIDDEN_TYPE
其中,BaseColumns.\u ID
是主键。我想要的是,我不想允许开发人员将重复的值插入到NATIVE\u CONTACT\u ID
中,如果他试图插入,那么与NATIVE\u CONTACT\u ID
对应的HIDDEN\u TYPE
列值的旧值应该被新值覆盖
让我向你进一步澄清。例如,我的表在插入几次后看起来是这样的
_ID | NATIVE_CONTACT_ID | HIDDEN_TYPE
---------------------------------------
1 23 1
2 24 0
3 25 1
4 26 0
现在,当开发人员希望插入一个具有NATIVE\u CONTACT\u ID
值为25且具有HIDDEN\u TYPE
值0
的新行时,HIDDEN\u TYPE
的旧值应该更改为这个新值。这里它应该从1
更改为0
,我不希望重复插入本地联系人ID
我希望我能把我的问题解释清楚
现在我的问题是,创建这样的表需要使用哪些关键字和SQL语句
这就是我尝试过的
public static final String TABLE_NAME = "hidden_info";
public static final String HIDDEN_TYPE = "hidden_type";
public static final String NATIVE_CONTACT_ID = "native_contact_id";
public static final String _ID = BaseColumns._ID;
public static void onCreate(SQLiteDatabase database) {
String query = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " ("
+ _ID + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "
+ NATIVE_CONTACT_ID + " INTEGER, " + HIDDEN_TYPE
+ " INTEGER)";
database.execSQL(query);
}
有关更多信息,请参阅。我已尝试了您的答案。但它正在插入一个具有新值的新行。例如,我的表中有一行的本机联系人ID值为4,隐藏类型值为1,现在当我插入一行的本机联系人ID值为4,隐藏类型值为0时,它会插入一个新行,而不是替换旧值…谢谢老兄。。。我已经解决了我的问题。只是我只把
NATIVE\u CONTACT
列作为唯一列。我使用了UNIQUE(本机联系人ID,隐藏类型)
,而不是UNIQUE(本机联系人ID)
…请编辑您的答案。当然我会接受的…:-)
CREATE TABLE name (column defs, UNIQUE (NATIVE_CONTACT_ID) ON CONFLICT REPLACE);