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

标签 android caching sqliteopenhelper

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

Clear cache in Chrome browser

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

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

最佳答案

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

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) {

  }

}

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


测试只是为了确保它是在/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

关于android - 是否可以使用 SQLiteOpenHelper 在缓存目录中创建数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34589603/

相关文章:

java - 从 LinearLayout 调用 getChildAt 时出现冲突的 ClassCastException

mongodb - 在 MongoDB 中缓存重复查询结果

ios - 有没有办法在没有内部缓存的情况下从 CGImage 读取数据?

javascript - 使所有用户的 cookie 无效

android - 备份室数据库

java - 使用 Fragment 时找不到 id 的 View

android - ViewPager 可以在每页中有多个 View 吗?

java - Q : Parse. com查询计数稳定性

android - 我如何加密 Android SQLite 数据库中的特定列数据。使用 SQLCipher 实用程序

android - 在商店发布新版本的 Android 应用程序时更新 SQLite 数据库