SQLite Datenbank sichern/in ein anderes Verzeichnis kopieren

jhjh

Bekanntes Mitglied
Hallo,

ich habe eine SQLite Datenbank die sich in /data/data/com.example.prototyp/database/mydb.dat befindet. Diese Datenbank wollte ich jetzt irgendwie „sichern“, sodass ich problemlos an meiner Datenbank herumspielen kann und die ursprüngliche Datenbank wieder aufspielen kann. Da ich nur über Root-Rechte auf die Datenbank zugreifen kann, wollte ich mein Handy rooten, um die Datenbank aus dem Ordner rauskopieren zu können. Das ist meinem China Handy (Blackview A7) leider nicht so ganz leicht.:rolleyes: Bei meinem Droid4X-Emulator war das kein Problem. Nun habe ich mir gedacht, dass ich mir die Datei doch sicherlich irgendwie mit Java in ein anderes Verzeichnis (bei dem ich auch ohne Root-Rechte zugriff habe) verschieben bzw. kopieren kann.

Mit folgendem Code habe ich das versucht:

Code:
try {
    File backupDB = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "mydb.dat"); 
    File currentDB = getApplicationContext().getDatabasePath("/data/data/com.example.prototyp/database/mydb.dat");    

if (currentDB.exists()) {
        FileInputStream fis = new FileInputStream(currentDB);
        FileOutputStream fos = new FileOutputStream(backupDB);
        fos.getChannel().transferFrom(fis.getChannel(), 0, fis.getChannel().size());

        fis.close();
        fos.close();
        Log.i("Database successfully", " copied to download folder");

    } else Log.i("Copying Database", " fail, database not found");
} catch (IOException e) {
    Log.d("Copying Database", "fail, reason:", e);

Das funktioniert leider nicht. Die Datenbank wird nicht gefunden. Der Pfad sollte aber korrekt sein. In der Manifest habe ich die entsprechende Berechtigung hinzugefügt:
Code:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Kann mir jemand bei meinem Vorhaben helfen ? Villeicht geht es ja auch auf eine andere Weise. Das Hauptziel ist, dass ich meine Datenbank sichern kann, damit ich die Datensätze nicht immer wieder neu einpflegen muss.

Ich bedanke mich :)
 

dzim

Top Contributor
Ist schon ewig her, dass ich so etwas gebaut habe. Damals habe ich aus dem Context den Pfad der DB so geholt mContext.getDatabasePath(MyConstants.DB_NAME); (der Name den man da im SQLiteOpenHelper angeben musste - heute gibt es ja die Room-API, da habe ich keine Ahnung mehr, wie man das heute so macht).
Damit sollte es gehen, die interne DB zu finden und kopieren.

Andersherum kannst du mit folgenden Schnippsel auch Files von irgendwo als SQLite-DB laden
Code:
public static SQLiteDatabase openDatabase(File source) {
    if (source == null || !source.isFile()) {
        return null;
    }
    return SQLiteDatabase.openDatabase(source.getAbsolutePath(), null, SQLiteDatabase.NO_LOCALIZED_COLLATORS | SQLiteDatabase.OPEN_READONLY);
}

Aber wie gesagt: Ich bin etwas eingerostet, was Android angeht, daher weiss ich nicht, wie aktuell der Code noch ist...
 

jhjh

Bekanntes Mitglied
Hey, danke für die Antwort.
Habe es mittlerweile hinbekommen einen Backup meiner Datenbank zu erstellen! Die entsprechende Backup Datei war lediglich "unsichtbar". Erst als ich über einen SQLiteManager auf meinen Speicher zugegriffen habe, habe ich die entsprechende Datei gefunden! :rolleyes:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C SQLite Datenbank in Kotlin - App stürtzt immer ab Android & Cross-Platform Mobile Apps 0
L Android SQLite Datenbank auf SDCard speichern Android & Cross-Platform Mobile Apps 5
B Android SQLite Datenbank 2 Einträge vertauschen? Android & Cross-Platform Mobile Apps 14
U SQLite-Datenbank Probleme Android & Cross-Platform Mobile Apps 8
S Sinnvollste weg eine SQLite DB mit Android auslesen Android & Cross-Platform Mobile Apps 7
B Android SQLite Tabelle neue Spalten hinzufügen Android & Cross-Platform Mobile Apps 8
B Android SQLite Datenbankdatei von SD-Karte zu DatabasePath kopieren Android & Cross-Platform Mobile Apps 5
L Android SQLite mit HSQLDB über Android synchronisieren Android & Cross-Platform Mobile Apps 13
K Android SQLite Query "WHERE _id in (X, Y, Z)" keine Daten Android & Cross-Platform Mobile Apps 6
T Android SQLite getColumnIndex Android & Cross-Platform Mobile Apps 6
K Null-Pointer-Exception in ListView - wird über Datenbank gefüllt Android & Cross-Platform Mobile Apps 1
N Android Ich kann mit meiner App nicht auf die Datenbank zugreifen Android & Cross-Platform Mobile Apps 4
J Android Probleme mit der Realm Datenbank Android & Cross-Platform Mobile Apps 3
M App Datenbank Server Android & Cross-Platform Mobile Apps 5
J Android Datenbank Klasse nur für CRUD-Operation, oder auch mehr ? Android & Cross-Platform Mobile Apps 8
B Android Probleme mit Realm Datenbank Android & Cross-Platform Mobile Apps 2
W Gezielte Ausgabe von abgefragten Inhalt aus Datenbank Android & Cross-Platform Mobile Apps 1
G Android Daten in einer Datenbank speichern Android & Cross-Platform Mobile Apps 1
EisKaffee Android Datenbank auf real Device Android & Cross-Platform Mobile Apps 4
S Dynamische EditText View eingaben in Datenbank speichern Android & Cross-Platform Mobile Apps 0
D Android-App Datenbank Android & Cross-Platform Mobile Apps 4
C Android Listen/Daten aus der SQLLite Datenbank darstellen Android & Cross-Platform Mobile Apps 2
F Android Datenbank upgrade wird nicht durchgeführt Android & Cross-Platform Mobile Apps 2
P J2ME - Anbindung an externe Datenbank Android & Cross-Platform Mobile Apps 3
M Welche Datenbank für J2ME? Android & Cross-Platform Mobile Apps 5
M Datenbank Android & Cross-Platform Mobile Apps 2

Ähnliche Java Themen

Neue Themen


Oben