use*_*701 12 sqlite android android-sdcard
我想在SD卡上创建一个sqlite数据库(不想用尽用户的内部存储).我熟悉OpenHelper模式:
public DatabaseFoo(Context context) {
OpenHelper openHelper = new OpenHelper(context);
mDb = openHelper.getWritableDatabase();
}
private static class OpenHelper extends SQLiteOpenHelper {
public OpenHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
...
Run Code Online (Sandbox Code Playgroud)
所以,如果我们想在SD卡上创建,我认为我们必须使用:
public static SQLiteDatabase openOrCreateDatabase (String path,
SQLiteDatabase.CursorFactory factory);
Run Code Online (Sandbox Code Playgroud)
但是什么是"工厂"的说法,应该使用什么工厂?
还有点担心如果用户在我的应用程序正在使用时删除SD卡会发生什么.
谢谢
我没有尝试过你在那里描述的内容,但可能是它可以完成并可能有效 - 只需要几点注意事项.首先,外部存储(SD卡)不安全,因此任何其他应用程序或用户都可以读/写它.其次,正如你所说,当它卸载时,数据库就会消失.
由于这些缺点,您可能最好尝试使用内部存储数据库(默认),这个数据库很小并且可能包含指向外部数据(如图像或文件)的指针 - 它们本身可以位于外部存储上(当外部存储不可用时,有占位符或其他处理).
尽管如此,如果您想尝试它,最好还是覆盖Context的getDatabasePath方法,例如使用您自己的Application对象,然后将其传递给常规的SQLiteOpenHelper.然后你不必担心游标工厂(这是可选的,因为源确认 - 所以只要你想要去那条路线就传递null).
小智 9
在SQLiteOpenHelper构造函数中执行此操作:
DatabaseHelper(Context context) {
super(context, context.getExternalFilesDir(null).getAbsolutePath() + "/" + DATABASE_NAME, null, DATABASE_VERSION);
}
Run Code Online (Sandbox Code Playgroud)
它将在sdcard上的应用程序文件夹中创建数据库:/ sdcard/Android/data/[your_package_name]/files.这样,数据库将被android视为应用程序的一部分,并在用户卸载应用程序时自动删除.
我的应用程序我有一个大型数据库,它在大多数情况下不适合旧手机内存,例如HTC Desire.它在sdcard上运行得很好,大多数应用程序都是"自动移动到SD卡",因此不要担心数据库无法访问,因为该应用程序无法自行访问.
| 归档时间: |
|
| 查看次数: |
27560 次 |
| 最近记录: |