在Android上访问/写入SQLite数据的最有效方法

时间:2012-02-14 16:32:48

标签: android sqlite

目前我在我的应用程序中使用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();
        }
    }
  1. 这是否可以直接调用SQLite?
  2. 我的代码中是否应该包含所有这些.close()语句?
  3. setPreferenceString中我复制/粘贴并调用getReadableDatabase,即使我写了数据并且它有效。为什么?

1 个答案:

答案 0 :(得分:0)

  

这是否可以直接调用SQLite?

AFAIK SQL查询是最接近RDB的

  

我的代码中是否应该包含所有这些.close()语句?

就个人而言,每次调用该方法时,我都不会创建DatabaseHelper,SQLiteDatabase和SQLiteStatement。我会在你需要它之​​前创建所有这些,并在不再需要时关闭它们。同样集中这是一个好主意恕我直言(例如使用单身人士)。

您的SQL语句也可以像

一样编写
SELECT Value FROM Preferences WHERE Key= ? LIMIT 1

这样,您只需准备一次并在需要语句时绑定参数。任何SQL查询也是如此。