Java 使两列在sqlite中唯一

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

我有一个有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 | 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);