卸载我的应用程序后,我的sqlite数据库会自动删除。我希望保留数据库,因此在重新安装应用程序时,我不需要重建数据库。
答案 0 :(得分:2)
默认情况下,Android应用的所有数据库都保存在/ data / data / your-package-name / databases文件夹中。卸载应用程序时,将删除/ data / data / your-package-name目录及其所有子目录。如果数据库文件保存在此位置,则无法保留它们。
但是如果将数据库文件保存到SD卡,则即使在卸载后也会保留这些文件。
以下是创建数据库的示例是外部目录
public class DatabaseHelper extends SQLiteOpenHelper {
public DatabaseHelper(final Context context) {
super(context, Environment.getExternalStorageDirectory()
+ File.separator + FILE_DIR
+ File.separator + DATABASE_NAME, null, DATABASE_VERSION);
...
}
...
}
答案 1 :(得分:1)
这个问题在这里得到解答 How to store sqlite database directly on sdcard
请记住添加在清单中写入外部存储空间的权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
我也看到了READ_EXTERNAL_STORAGE&amp; WRITE_EXTERNAL_STORAGE被归类为“危险权限”
reff:https://developer.android.com/guide/topics/permissions/requesting.html
您需要获得AT RUNTIME的用户权限(仅限一次)。本页介绍了如何操作: https://developer.android.com/training/permissions/requesting.html
以下是执行此检查的示例代码(来自Read and Write permission for storage and gallery usage for marshmallow)
public class MainActivity extends AppCompatActivity implements
ActivityCompat.OnRequestPermissionsResultCallback{
private static final int REQUEST_WRITE_PERMISSION = 786;
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == REQUEST_WRITE_PERMISSION && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
openFilePicker();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
requestPermission();
}
private void requestPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_WRITE_PERMISSION);
} else {
openFilePicker();
}
}
}