如果卸载应用程序,如何在Android设备上保留sqlite数据库?

时间:2017-05-28 04:00:45

标签: android sqlite android-sqlite

卸载我的应用程序后,我的sqlite数据库会自动删除。我希望保留数据库,因此在重新安装应用程序时,我不需要重建数据库。

2 个答案:

答案 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();
    }
  }
}