是否可以使用 SQLiteOpenHelper 在缓存目录中创建数据库?
Is it possible to use SQLiteOpenHelper to create DB in cache dir?
我想在缓存中创建一个数据库,以便在用户单击 Clear cache
按钮时将其清除。
在 SQLiteOpenHelper
构造函数中,只有参数传递数据库名称,而不是目录(默认为 dadabases
)。
当用户想要清除缓存时,是否有删除此类数据库的选项?
如果您要清除 tabledb.execSQL("delete * from "+ TABLE_NAME);
中的数据
您还可以删除 tables db.delete("TABLE_NAME", null, null);
您可以在特定位置创建和打开数据库,但您需要使用 SQLiteDatabase class(选择 openOrCreateDatabase
方法之一):如您所述,您可以不要使用提供的 SQLiteOpenHelper 在不同的路径中创建数据库。
您还可以修改 SQLiteOpenHelper 的代码以满足您的需要。从 link 中获取源代码,复制到您的项目的新 class 中并修改 getDatabaseLocked
方法。
您还可以从 SQLiteAssetHelper 中汲取灵感。
以下是在缓存目录中创建数据库的示例:
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
我想在缓存中创建一个数据库,以便在用户单击 Clear cache
按钮时将其清除。
在 SQLiteOpenHelper
构造函数中,只有参数传递数据库名称,而不是目录(默认为 dadabases
)。
当用户想要清除缓存时,是否有删除此类数据库的选项?
如果您要清除 tabledb.execSQL("delete * from "+ TABLE_NAME);
您还可以删除 tables db.delete("TABLE_NAME", null, null);
您可以在特定位置创建和打开数据库,但您需要使用 SQLiteDatabase class(选择 openOrCreateDatabase
方法之一):如您所述,您可以不要使用提供的 SQLiteOpenHelper 在不同的路径中创建数据库。
您还可以修改 SQLiteOpenHelper 的代码以满足您的需要。从 link 中获取源代码,复制到您的项目的新 class 中并修改 getDatabaseLocked
方法。
您还可以从 SQLiteAssetHelper 中汲取灵感。
以下是在缓存目录中创建数据库的示例:
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