В настоящее время я использую ContentProvider в своем приложении. Из-за «слоев» и фактической необходимости для провайдера я работаю над оптимизацией доступа к данным в максимально возможной степени. Вот моя попытка сделать это:Самый эффективный способ доступа/записи данных на SQLite на Android
public static String getPreferenceString(Context context, String key)
{
DatabaseHelper helper = new DatabaseHelper(context);
SQLiteDatabase database = helper.getReadableDatabase();
SQLiteStatement statement = database.compileStatement("SELECT Value FROM Preferences WHERE Key='" + key + "' LIMIT 1");
try
{
return statement.simpleQueryForString();
}
catch (Exception ex)
{
return "";
}
finally
{
statement.close();
database.close();
helper.close();
}
}
public static void setPreferenceString(Context context, String key, String value)
{
DatabaseHelper helper = new DatabaseHelper(context);
SQLiteDatabase database = helper.getReadableDatabase();
SQLiteStatement statement = database.compileStatement("INSERT OR REPLACE INTO Preferences (Key, UpdatedOn, Value) VALUES ('" +
key + "', '" +
Utility.getDateConvertedToUTCDBString(new Date()) + "', '" +
value + "'); ");
try
{
statement.execute();
}
finally
{
statement.close();
database.close();
helper.close();
}
}
- Это примерно так же близко, как я могу добраться до прямых вызовов SQLite?
- Должен ли я иметь все это
.close()
заявления в моем коде? - В
setPreferenceString
Я действительно копировал/вставлял и вызывалgetReadableDatabase
, хотя я пишу данные, и это работает. Зачем?
Что вы подразумеваете под «прямыми звонками»? Запросы AFAIK SQL являются самыми низкими, вы можете пойти против БД. – m0skit0
Да, вот что я имел в виду. Просто хочу проверить, чтобы я делал большинство прямых звонков. Кроме того, мне хотелось узнать, действительно ли этот код - возможности блокировки, и т. Д. – katit
Я не могу найти код, где вы выбираете базу данных для выполнения всех этих запросов, что сделано в расширенном классе DatabaseHelper, не так ли? – Andreas