При попытке реализовать хранилище SQLite возникло странное поведение. Символы «?» Не заменяются.rawQuery() в Android SQLite не компилирует параметры
Мой код:
public class DBHandler extends SQLiteOpenHelper {
public void writeTask(JSONObject object) throws JSONException {
SQLiteDatabase db = this.getWritableDatabase();
String id = object.get(OBJECT_ID).toString();
String content = object.toString();
String md5 = "md5"; //testing
Cursor c = db.rawQuery("INSERT OR REPLACE INTO ? (? , ? , ?) VALUES (? , ? , ?);", new String[] {TABLE_OBJECTS, OBJECT_ID, OBJECT_CONTENT, OBJECT_MD5, id, content, md5 });
}
}
Затем он бросает странную ошибку:
android.database.sqlite.SQLiteException: near "?": syntax error (code 1): , while compiling: INSERT OR REPLACE INTO ? (? , ? , ?) VALUES (? , ? , ?);
Первая ошибка исправленное, но до сих пор не работает:
String selectQuery = "INSERT OR REPLACE INTO " + TABLE_OBJECTS + " ("
+ OBJECT_ID + "," + OBJECT_CONTENT + "," + OBJECT_MD5 + ") "
+ "VALUES (? , ? , ?);";
String[] args = { id, content, md5 };
Log.d("FP", selectQuery);
Cursor c = db.rawQuery(selectQuery,args);
Теперь база данных является нетронутым после этого запрос. Журналы показать мой запрос:
INSERT OR REPLACE INTO objects (id,content,md5) VALUES (?,?,?);
Любые предложения?
так, rawQuery() только для ВЫБРАТЬ.
Но мне все же нужно выполнять экранирование специальных символов, потому что контент -variable - это сжатый JSON, и execSQL этого не допускает.
hmmm rawQuery для вставок .. интересный выбор ... очевидно, есть аналогичный api с 'db.insert' с' ContentValues' .... – Selvin
попытался использовать что-то вроде ** UPSERT ** и нашел пример с * * ВСТАВИТЬ ИЛИ ЗАМЕНИТЬ ** – Schtz
есть кусок для 'INSERT OR REPLACE' в классе' SQliteDatabase' ... просто взгляните на документы ... имя метода должно быть очевидно ... может быть, хорошо , hmmm, 'replace' ... – Selvin