webentwicklung-frage-antwort-db.com.de

Wie speichert man die SQLite-Datenbank direkt auf der SD-Karte?

ich möchte meine sqlite-Datenbank in sdcard anstelle des Standardpfads erstellen ... Ich möchte auch auf alle meine Daten von sdcard zugreifen Ich habe diesen Code verwendet:

            private static class OpenHelper extends SQLiteOpenHelper {

    OpenHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        SQLiteDatabase.openOrCreateDatabase("/sdcard/"+DATABASE_NAME,null);

    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE "
                + TABLE_NAME
                + " (id INTEGER PRIMARY KEY, name TEXT, number TEXT, skypeId TEXT, address TEXT, image BLOB)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(db);
    }
}

Problem:

Wenn ich die Datenbankdatei im Standardpfad sehe, kann ich alle Daten sehen und tabelle, aber wenn ich die in sd-karte erstellte datenbankdatei sehe, dann zeigt keine Daten an, sondern nur die Datenbankdatei

IN Konstruktor erstellt nur die Datei in SD-Karte, aber im Standardpfad funktioniert alles gut ........ Wie kann man alle Sqlitedata auf SD-Karte für den weiteren Zugriff speichern?

20
Shiv

Ich habe meine Datenbank mit erstellt

    public DatabaseHelper(final Context context) {
    super(context, Environment.getExternalStorageDirectory()
            + File.separator + FILE_DIR
            + File.separator + DATABASE_NAME, null, DATABASE_VERSION);
}

und hatte keine Probleme weiter. Ich denke, Ihr Aufruf an super () sollte auch auf die SD-Karte verweisen.

43
koljaTM

Sie geben bei Ihrem Aufruf super() einen unvollständigen Namen an. Versuchen Sie es mit:

OpenHelper(Context context) {
    super(context, "/sdcard/"+DATABASE_NAME, null, DATABASE_VERSION);
    SQLiteDatabase.openOrCreateDatabase("/sdcard/"+DATABASE_NAME,null);

}

Ansonsten sollten Sie immer Environment.getExternalStoreDirectory() verwenden, um den Pfad zum externen Speicher abzurufen, und Sie sollten auch den Status des externen Speichers überprüfen, bevor Sie ihn verwenden.

2
Raghav Sood
public DataBaseHelper(final Context context) {

    super(context, Environment.getExternalStorageDirectory()
    + File.separator+ MYDATABASE_NAME, null, MYDATABASE_VERSION);
}

**Also Add permission in Android Manifest
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />**
1

Ab Android 6.0 (API-Ebene 23) erteilen Benutzer Berechtigungen für Apps, während die App ausgeführt wird, nicht bei der Installation der App. Dieser Ansatz vereinfacht den Installationsprozess der App, da der Benutzer bei der Installation oder Aktualisierung der App keine Berechtigungen erteilen muss.

Um zur Laufzeit Berechtigungen zu erhalten, müssen Sie den Benutzer anfordern. Sie können das auf folgende Weise tun.

Erste Anforderung von Berechtigungen.

String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE};
        requestPermissions(permissions, WRITE_REQUEST_CODE);

Und dann können Sie die Ergebnisse überprüfen 

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    switch (requestCode) {
       case WRITE_REQUEST_CODE:
         if(grantResults[0] == PackageManager.PERMISSION_GRANTED){
           //Permission granted.
           //Continue with writing files...
         }
       else{
           //Permission denied.
         }
        break;
    }
}

Hier ist eine gute Lernquelle anfordernde-Laufzeit-Berechtigungen-in-Android-Marshmallow/

0
atiruz

Geben Sie einfach den Pfad im Konstruktor an.

 DatabaseHelper(Context context) {
    super(context, Environment.getExternalStorageDirectory()
            + File.separator + "/DataBase/" + File.separator
            + DB_NAME, null, DB_VERSION);
}
0
Vishal Vaishnav