如果不存在则插入?

发布于 2024-11-01 07:51:51 字数 742 浏览 1 评论 0原文

我正在提示用户将项目添加到 SQLiteDb。当他们单击添加时,我想检查该项目是否已经存在......如果不存在,那么我想插入它。

我拨打了

mDbHelper.createNote(inputLine.getText().toString().trim(), mTable[i]);

Which Calls...

public long createNote(String value, String table) {
        ContentValues initialValues = new ContentValues();
        initialValues.put(table, value);

        return mDb.insert(table, null, initialValues);
    }

这可行,但它不会检查该项目是否已存在,因此它仍然会插入重复项。所以我尝试了

return mDb.insertWithOnConflict(table, null, initialValues, SQLiteDatabase.CONFLICT_FAIL);

但是,它似乎无法识别 insertWIthOnConflict 或 SQLiteDatabase.CONFLICT_FAIL...

我怎样才能让它工作?

编辑:它有 1 个表,2 行。表名=注释,行=_id,注释。

I'm prompting a user to add an item to an SQLiteDb. When they click add, I want to check if that item already exists... if it doesn't then I want to insert it.

I make the call

mDbHelper.createNote(inputLine.getText().toString().trim(), mTable[i]);

Which calls...

public long createNote(String value, String table) {
        ContentValues initialValues = new ContentValues();
        initialValues.put(table, value);

        return mDb.insert(table, null, initialValues);
    }

Thats works but it doesn't check if the item already exists, so it still inserts duplicates. So I tried

return mDb.insertWithOnConflict(table, null, initialValues, SQLiteDatabase.CONFLICT_FAIL);

However, it doesn't appear to recognize insertWIthOnConflict or SQLiteDatabase.CONFLICT_FAIL...

How can I get this to work?

Edit: it's 1 table, 2 rows. table name = note, rows = _id, note.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

扭转时空 2024-11-08 07:51:51

使用 REPLACE 命令

Use the REPLACE command

清醇 2024-11-08 07:51:51

在这种情况下,我执行这样的检查

if (!checkRecordExist(DATABASE_TABLE, new String[] {KEY_1, KEY_2}, new String[] {value_1, value_2})) 
database.insert(DATABASE_TABLE, null, updateValues);

private boolean checkRecordExist(String tableName, String[] keys, String [] values) {
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < keys.length; i++) {
        sb.append(keys[i])
            .append("=\"")
            .append(values[i])
            .append("\" ");
        if (i<keys.length-1) sb.append("AND ");
    }

    Cursor cursor = database.query(tableName, null, sb.toString(), null, null, null, null);
    boolean exists = (cursor.getCount() > 0);
    cursor.close();
    return exists;
}

In such situation I perfrom such checking:

if (!checkRecordExist(DATABASE_TABLE, new String[] {KEY_1, KEY_2}, new String[] {value_1, value_2})) 
database.insert(DATABASE_TABLE, null, updateValues);

where

private boolean checkRecordExist(String tableName, String[] keys, String [] values) {
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < keys.length; i++) {
        sb.append(keys[i])
            .append("=\"")
            .append(values[i])
            .append("\" ");
        if (i<keys.length-1) sb.append("AND ");
    }

    Cursor cursor = database.query(tableName, null, sb.toString(), null, null, null, null);
    boolean exists = (cursor.getCount() > 0);
    cursor.close();
    return exists;
}
给妤﹃绝世温柔 2024-11-08 07:51:51

添加主键。如果尝试插入具有相同键的另一行,则插入将失败。

Add a Primary Key. If you try to insert another row with the same key, the insert will fail.

ι不睡觉的鱼゛ 2024-11-08 07:51:51

您是否尝试过使用未设置为自动增量的主键?这可能就是 REPLACE 命令不起作用的原因

Have you tried using a primary key that isn't set to auto-increment? That might be why the REPLACE command isn't working

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文