当我打开我的RSS应用程序时,我想检查我的数据库中是否存在一篇文章。如果存在,我想删除它(或忽略它),如果不将其写入数据库。
我一直在尝试这样做:
Cursor cursor = ourDatabase.rawQuery("select 1 from "
+ DBHelper.DATABASE_TABLE + " where " + DBHelper.TITLE + "='"
+ title + "'" + " AND " + DBHelper.DATE + "='" + date + "'",
new String[] {});
if (cursor.moveToFirst()) {
boolean exists = (cursor.getCount() > 0);
cursor.close();
return exists;
} else {
return false; }
}
但我收到此错误:
06-06 16:01:11.341: E/AndroidRuntime(13867): Caused by: android.database.sqlite.SQLiteException: near "όσο": syntax error (code 1): , while compiling: select 1 from all_t where title='Ο ΦΟΒΟΣ και ο ΤΡΟΜΟΣ των διαδηλωτών!!! Αυτές οι γυναίκες είναι πιο σκληρές απ' όσο δείχνουν!' AND date='Wed, 05 Jun 2013 18:12:15'
这是不使用selectionArgs
,这正是人们应该使用它们的原因:您正在用简单的引号引用您的字符串,但您的字符串包含单引号,因此 SQLite 在字符串实际结束之前检测到字符串的结尾,并尝试将其余部分解析为 SQLite 关键字。
正确的解决方案是将转义留给 SQLite,通过使用那些selectionArgs
而不是试图逃避自己。在你的情况下,那就是:
Cursor cursor = ourDatabase.rawQuery("select 1 from "
+ DBHelper.DATABASE_TABLE + " where " + DBHelper.TITLE + "=?"
+ " AND " + DBHelper.DATE + "=?",
new String[] {title, date});
另外,它更干净,因为您可以从查询中创建一个常量,而不是每次都构造它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)