Я использую ORMLite с таблицей RecentSearch:
@DatabaseTable(tableName = LocalStorageConfig.SQL_RECENTS_TABLE_NAME)
public class RecentSearch {
@DatabaseField
public String search_text;
public static String SQL_SEARCH_FIELD = "search_text";
@DatabaseField
public String location_text;
public static String SQL_LOCATION_FIELD = "location_text";
@DatabaseField
public Date creation_date = new Date();
public static String SQL_CREATION_DATE_FIELD = "creation_date";
Он работает почти все время, но когда я обнаруживаю случай со строкой, содержащей ', это кажется проблемой. Вы знаете, как это решить? Я не мог найти то, что искал.
Вот моя функция для удаления недавнего
public boolean deleteRecent(RecentSearch search) {
try {
Dao<RecentSearch, Integer> recentsDao = recentsSqlManager.getRecentsDao();
DeleteBuilder<RecentSearch, Integer> deleteBuilder = recentsDao.deleteBuilder();
deleteBuilder.where().eq(RecentSearch.SQL_SEARCH_FIELD, search.getSearch_text()).and().eq(RecentSearch.SQL_LOCATION_FIELD, search.location_text);
recentsDao.delete(deleteBuilder.prepare());
return true;
} catch (Exception e) {
Log.e(TAG, "Database exception", e);
return false;
}
}
Вот исключение, которое я получаю:
java.sql.SQLException: Problems executing Android statement: DELETE FROM `recent_searches` WHERE (`search_text` = '' AND `location_text` = 'Villefranche-d'Allier, Allier' )
at com.j256.ormlite.misc.SqlExceptionUtil.create(SqlExceptionUtil.java:22)
at com.j256.ormlite.android.AndroidCompiledStatement.runUpdate(AndroidCompiledStatement.java:66)
at com.j256.ormlite.stmt.StatementExecutor.delete(StatementExecutor.java:425)
at com.j256.ormlite.dao.BaseDaoImpl.delete(BaseDaoImpl.java:347)
...
Caused by: android.database.sqlite.SQLiteException: near "Allier": syntax error: , while compiling: DELETE FROM `recent_searches` WHERE (`search_text` = '' AND `location_text` = 'Villefranche-d'Allier, Allier' )
at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:92)
at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:65)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:83)
at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:41)
at android.database.sqlite.SQLiteDatabase.compileStatement(SQLiteDatabase.java:1149)