如果不存在则插入:SQLite

Insert if not exists: SQLite

如果数据库中不存在该标题,我想插入数据。

这是我在书面查询中遇到的错误:

near "with": syntax error (code 1): , while compiling: SELECT * FROM movie WHERE headline=Albert Collen

代码:

public boolean Insert(Item item) {
    SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    Cursor cursor = sqLiteDatabase.rawQuery("SELECT * FROM " + TABLE + " WHERE headline=" + item.getName() , null);

    if (cursor.moveToFirst()) {
    } else {
        contentValues.put("name", item.getName());           
        long result = sqLiteDatabase.insert(TABLE, null, contentValues);

        if (result == -1) {
            return false;
        } else {
            return true;
        }
    }

    cursor.close();
    sqLiteDatabase.close();

    return true;
}

首先,结果查询错误。所有的字符串常量都要被引用,像这样

SELECT * FROM movie WHERE headline='Albert Collen';

所以,尝试像这样编写查询,也许会有帮助

Cursor cursor = sqLiteDatabase.rawQuery("SELECT * FROM " + TABLE + " WHERE headline='" + item.getName() + "'" , null);

但是连接查询不是一个好主意,因为它至少可以进行 SQL 次注入。

例如,当 item.getName() 包含以下行“'; drop table movies;”时可能会导致问题;

更好的选择是使用绑定查询变量。不幸的是,我不熟悉如何在 sqlite 中使用 java-android,因此您最好在 android

中检查如何使用此类查询

您应该使用查询参数

rawQuery("SELECT * FROM movie WHERE headline = ?", new String[] {"Albert Collen"});

以避免必须转义引号和其他字符。