是否可以使用SQLiteOpenHelper在缓存目录中创建数据库?

时间:2016-01-04 10:59:22

标签: android caching sqliteopenhelper

我想在缓存中创建一个数据库,以便在用户点击Clear cache按钮时将其清除。

Clear cache in Chrome browser

SQLiteOpenHelper构造函数中,只有传递数据库名称的参数,而不是目录(默认为dadabases)。

当用户想要清除缓存时,是否有删除此类数据库的选项?

3 个答案:

答案 0 :(得分:4)

以下是在缓存目录中创建数据库的示例:

public class CachedDatabase extends SQLiteOpenHelper {

  public CachedDatabase(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
    super(context, new File(context.getCacheDir(), name).getAbsolutePath(), factory, version);
  }

  @Override public void onCreate(SQLiteDatabase db) {
    // just for testing
    db.execSQL("CREATE TABLE example (id INTEGER PRIMARY KEY AUTOINCREMENT, foo, bar, baz, qux)");
  }

  @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

  }

}

您需要做的就是将绝对路径作为构造函数中的name参数传递。

经测试只是为了确保它是在/ data / data / [package_name] / cache:

中创建的
CachedDatabase cachedDatabase = new CachedDatabase(this, "TEST", null, 1);
SQLiteDatabase database = cachedDatabase.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("foo", "foo");
values.put("bar", "bar");
values.put("baz", 123);
values.put("qux", true);
database.insert("example", null, values);

检查数据库:

$ adb shell
$ run-as [YOUR_PACKAGE_NAME]
$ ls cache
TEST
TEST-journal

答案 1 :(得分:1)

您可以在特定位置创建和打开数据库,但需要使用SQLiteDatabase类(选择openOrCreateDatabase方法之一):正如您所提到的,您无法创建使用提供的SQLiteOpenHelper在不同路径中的数据库。

您还可以修改SQLiteOpenHelper的代码以满足您的需求。从链接中获取源代码,复制到项目的新类中并修改getDatabaseLocked方法。

您还可以从SQLiteAssetHelper获取灵感。

答案 2 :(得分:-1)

如果您要清除表R G B B G R //...

中的数据

您也可以删除表db.execSQL("delete * from "+ TABLE_NAME);