在sqlite中使两列成为唯一的

Run*_*ion 2 java sql sqlite unique-constraint android-sqlite

我有一个有3列的表.列是

BaseColumns._ID | NATIVE_CONTACT_ID | HIDDEN_TYPE
Run Code Online (Sandbox Code Playgroud)

在这些,BaseColumns._ID是一个主要的关键.我想要的是,我不想让开发人员插入重复值NATIVE_CONTACT_ID,如果他试图插入,那么HIDDEN_TYPE对应的列值的旧值NATIVE_CONTACT_ID应该用新值覆盖.

让我更多地澄清你.例如,我的表在几次插入后看起来像这样.

_ID  | NATIVE_CONTACT_ID | HIDDEN_TYPE
---------------------------------------
  1        23                 1
  2        24                 0
  3        25                 1
  4        26                 0
Run Code Online (Sandbox Code Playgroud)

现在,当开发人员想要插入NATIVE_CONTACT_ID值为25且具有HIDDEN_TYPE值的新行时0,旧值HIDDEN_TYPE应更改为此新值.这里它应该改为0from 1,我不想允许重复插入NATIVE_CONTACT_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);
    }
Run Code Online (Sandbox Code Playgroud)

mok*_*mok 5

CREATE TABLE name (column defs, UNIQUE (NATIVE_CONTACT_ID) ON CONFLICT REPLACE);
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅此处.