如果不存在则插入: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"});
以避免必须转义引号和其他字符。
如果数据库中不存在该标题,我想插入数据。
这是我在书面查询中遇到的错误:
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"});
以避免必须转义引号和其他字符。