Currently I'm using ContentProvider in my application. Because of "layers" and no actual need for provider - I'm working on optimizing data access as much as possible. Here is my attempt to do this:
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();
        }
    }
- Is that about as close as I can get to direct calls to SQLite?
- Should I have all this .close()statements in my code?
- In setPreferenceStringI did copy/paste and calledgetReadableDatabaseeven though I write data and it works. Why?
 
    