Android SQL - 检查数据库中是否已存在整行

Mdl*_*dlc 5 database android

我正在尝试创建一个简单的收藏夹应用程序,您可以在其中保留您的收藏页面(例如,来自网络).

假设我的数据库中包含以下数据

Title    | URL     | TAG      |
-------------------------------
Hey       Ho.com    Site
Jo        Jo.com    Image
Jo        Mo.com    Image
Run Code Online (Sandbox Code Playgroud)

现在我想确保用户不会将同一页面添加两次,因此我将检查该值是否已存在.但我需要用户不会将站点添加到已添加的表中.

所以我想说我会尝试添加:

Title    | URL     | TAG      |
-------------------------------
Jo        Mo.com    Image
Run Code Online (Sandbox Code Playgroud)

这将返回true("检查行是否存在",因为已经存在相同的行).

但如果我想尝试添加:

Title    | URL     | TAG      |
-------------------------------
Jo        Go.com    Image
Run Code Online (Sandbox Code Playgroud)

它会返回false(虽然标题已存在),因为没有相同的行.

这是我将数据添加到数据库的代码:

public long createNote(String title, String url, String rn) {
    ContentValues initialValues = new ContentValues();
    initialValues.put(KEY_TITLE, title);
    initialValues.put(KEY_URL, url);
    initialValues.put(KEY_RN, rn);

    return mDb.insert(DATABASE_TABLE, null, initialValues);
Run Code Online (Sandbox Code Playgroud)

如何检查数据库中是否已存在行?

小智 7

您可以使用光标检查:

public boolean checkEvent(String title, String URL, String tag) 
{
    SQLiteDatabase db = this.getReadableDatabase();

    Cursor cursor = db.query(TABLES, 
            new String[] { KEY_TITLE,KEY_URL,KEY_TAG }, 
            KEY_TITLE + " = ? and "+ KEY_URL + " = ? and " + KEY_TAG + " = ?" , 
            new String[] {title,url,tag}, 
            null, null, null, null);

    if(cursor.moveToFirst())

     return true; //row exists
    else 
     return false;

}
Run Code Online (Sandbox Code Playgroud)

编辑:代码现在复制并粘贴就绪


bsa*_*ner 5

在数据库级别有一种非常优雅(imho)的方法.在创建数据库时将其添加到create table sql:

 UNIQUE(TITLE, URL) ON CONFLICT REPLACE 
Run Code Online (Sandbox Code Playgroud)

然后你可以插入你想要的所有而无需检查,如果行已经存在,它将被添加或更新.