Android SQLite Datenbankdatei von SD-Karte zu DatabasePath kopieren

bruce85

Bekanntes Mitglied
Hallo,
ich versuche schon seid ein Paar tagen eine SQLite Datenbankdatei von der SD-Karte zu DatabasePath zu kopieren, leider ohne erfolg.

In meiner App hat man die möglichkeit Backup von der SQLite Datenbank auf seine SD-Karte zu erstellen, das klappt ja soweit, nur klappt es nicht mehr diese zu Importieren.

Hier ist der Code:
Code:
try {
    File fileFrom = new File(path, fileName);
    File fileTo = activity.getDatabasePath("data.db");
    FileChannel src = new FileInputStream(fileFrom).getChannel();
    FileChannel dst = new FileOutputStream(fileTo).getChannel();
    dst.transferFrom(src, 0, src.size());
    src.close();
    dst.close();
} catch (Exception e) {
    Log.d(TAG, "Import Failed!");
}

Mir werden auch keine Fehlermeldungen ausgegeben.

Kann es Vielleicht daran liegen, das bereits eine SQLite Datenbankdatei vorhanden ist und diese daher nicht überschrieben werden kann?

Ich bedanke mich schon mal für die Hilfe.

Gruss
 

bruce85

Bekanntes Mitglied
Danke für die antwort.
Die Datenbank ist nicht geöffnet, nur wird sie beim starten der App Initialisiert:
Code:
public class  App extends Application {
    private static Context context;
    private static DBHelper dbHelper;

    @Override
    public void onCreate()
    {
        super.onCreate();
        context = this.getApplicationContext();
        dbHelper = new DBHelper();
        DatabaseManager.initializeInstance(dbHelper);
    }

    public static Context getContext(){
        return context;
    }
}
Code:
public class DBHelper  extends SQLiteOpenHelper {
    private static final int DATABASE_VERSION =8;
    private static final String DATABASE_NAME = "data.db";
    private static final String TAG = DBHelper.class.getSimpleName().toString();

    public DBHelper( ) {
        super(App.getContext(), DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        //All necessary tables you like to create will create here
        db.execSQL(TestRepo.createTable());
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.d(TAG, String.format("SQLiteDatabase.onUpgrade(%d -> %d)", oldVersion, newVersion));
        db.execSQL("DROP TABLE IF EXISTS " + TestMemo.TABLE);
        onCreate(db);
    }

}
und in der Manifest Datei eingebunden:
Code:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="*************">
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WAKE_LOCK" />

    <application
        android:name=".app.App"
        *************

Die Datenbank öffne ich dann z.B. so:
Code:
SQLiteDatabase db = DatabaseManager.getInstance().openDatabase();
wenn ich bestimmte Aktionen durchführen möchte.

Damit wollte ich nur sagen, das die Datenbank nicht geöffnet ist, sondern nur Initialisiert.
Woran könnte das Problem jetzt liegen, das ich ein Backup nicht überschreiben kann?

Danke schonmal.

Edit: Ich hab jetzt zum Test einfach mal die Initialisierung rausgenommen und die App mal gestartet und das Backup geladen.
Danach habe ich die Initialisierung wieder eingebaut und die App erneut gestartet, hat funktioniert.
Ich muss einfach mal versuchen die Initialisierung aufzuheben beim laden einer Backup, also die Datei einfach wieder freigeben.

Gruss
 
Zuletzt bearbeitet:

bruce85

Bekanntes Mitglied
Ja, wie gebe ich es am besten wieder frei?
Hab schon einiges versucht, leider ohne erfolg.

Edit: Wenn ich versuche ein Backup zu importieren, dann sind immer alle Datensätze weg, also muss es doch überschrieben worden sein, aber wieso sind alle Datensätze dann weg?
Wenn ich jetzt die App ohne Datenbank Initialisierung einmal kurz starte und ein Backup Importiere, dann die Datenbank Initialisierung wieder hinzufüge und die App nochmal starte, dann klappt es ja.
Ich komme da echt nicht mehr weiter.

Gruss
 
Zuletzt bearbeitet:

bruce85

Bekanntes Mitglied
Ich hab das jetzt so gelöst:
Code:
activity.deleteDatabase("data.db");
File dbFile = activity.getDatabasePath(fileName);
boolean renamed = dbFile.renameTo(new File(activity.getDatabasePath("data.db").getParent(), "data.db"));
Wenn ich ein Backup lade, dann Kopiere ich zuerst das Backup in DatabasePath, danach lösche ich die data.db und benenne das Backup, das ich kopiert habe, in data.db um.

Gruss
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Sinnvollste weg eine SQLite DB mit Android auslesen Android & Cross-Platform Mobile Apps 7
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
J SQLite Datenbank sichern/in ein anderes Verzeichnis kopieren Android & Cross-Platform Mobile Apps 2
B Android SQLite Tabelle neue Spalten hinzufügen Android & Cross-Platform Mobile Apps 8
B Android SQLite Datenbank 2 Einträge vertauschen? Android & Cross-Platform Mobile Apps 14
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
U SQLite-Datenbank Probleme Android & Cross-Platform Mobile Apps 8
T Lesen / Schreiben einer Textdatei - SD-Karte Android & Cross-Platform Mobile Apps 42
Alex/89 ImageView mit einem Bild von der SD Karte füllen Android & Cross-Platform Mobile Apps 5
R Android osmdroid Karte in App inbinden Android & Cross-Platform Mobile Apps 6
M File der externen SD-Karte herausfinden Android & Cross-Platform Mobile Apps 3
T SMS auslesen / SIM-Karte "simulieren" Android & Cross-Platform Mobile Apps 5

Ähnliche Java Themen

Neue Themen


Oben