Android在添加新值之前搜索数据库

时间:2013-05-30 22:57:01

标签: android

我有一个QR列表适配器,我在其中添加值(qr代码和youtube id):

public void add(String qrcode, String ytid){
    ContentValues values = new ContentValues();
    values.put(DatabaseHelper.QRCODE, qrcode);
    values.put(DatabaseHelper.YT_ID, ytid);
    context.getContentResolver().insert(YouListContentProvider.CONTENT_URI, values);
    QRItem item = new QRItem(YouListContentProvider.lastId, qrcode, ytid);
    list.getQRItems().add(item);

    notifyDataSetChanged();
}

我希望能够预先搜索数据库,如果值(QRCODE和youtube ID)已经存在(视频已经在数据库中),那么就不要将它们添加到列表中。我的数据库帮助器如下所示:

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("CREATE TABLE " + TABLE_NAME + "("
            +ID+" INTEGER PRIMARY KEY, "
            +QRCODE+" TEXT, "
            +YT_ID+" TEXT )");
    PutValues(db);

}

2 个答案:

答案 0 :(得分:1)

如果您能够更改onCreate()方法。我建议您为QRCODEYT_ID列创建索引:

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("CREATE TABLE " + TABLE_NAME + "("
            + ID  +" INTEGER PRIMARY KEY, "
            + QRCODE + " TEXT, "
            + YT_ID  +" TEXT,
            + UNIQUE (QRCODE, YT_ID) )");
    PutValues(db);

}

现在,SQLite不允许您插入QRCODEYT_ID与现有行相同的行。

答案 1 :(得分:1)

添加

   UNIQUE (QRCODE, YT_ID) ON CONFLICT IGNORE