目前我在我的应用程序中使用ContentProvider。由于“层”而没有实际需要提供者 - 我正在努力尽可能地优化数据访问。我试图这样做:
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();
}
}
.close()
语句? setPreferenceString
中我复制/粘贴并调用getReadableDatabase
,即使我写了数据并且它有效。为什么?答案 0 :(得分:0)
这是否可以直接调用SQLite?
AFAIK SQL查询是最接近RDB的
我的代码中是否应该包含所有这些.close()语句?
就个人而言,每次调用该方法时,我都不会创建DatabaseHelper,SQLiteDatabase和SQLiteStatement。我会在你需要它之前创建所有这些,并在不再需要时关闭它们。同样集中这是一个好主意恕我直言(例如使用单身人士)。
您的SQL语句也可以像
一样编写SELECT Value FROM Preferences WHERE Key= ? LIMIT 1
这样,您只需准备一次并在需要语句时绑定参数。任何SQL查询也是如此。