wake-up-neo.net

Wo Raum Datenbank Android speichern?

Ich verwende die Raumbibliothek, um Daten in der Datenbank zu speichern. Ich möchte die Datenbank abrufen.

verwendet diesen Code

private void copyFile() {

    try {
        File sd = Environment.getExternalStorageDirectory();
        File data = Environment.getDataDirectory();

        if (sd.canWrite()) {
            String currentDBPath=getDatabasePath("photex_db.db").getAbsolutePath();
            String backupDBPath = "photex_db.db";
            File currentDB = new File(data, currentDBPath);
            File backupDB = new File(sd, backupDBPath);

            if (currentDB.exists()) {
                FileChannel src = new FileInputStream(currentDB).getChannel();
                FileChannel dst = new FileOutputStream(backupDB).getChannel();
                dst.transferFrom(src, 0, src.size());
                src.close();
                dst.close();
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

es funktioniert in einfachen sqlLite, aber funktionierte nicht für ROOM Library ROOM

gibt es eine Möglichkeit, Datenbank zu bekommen?

Klasse zum Erstellen einer Datenbank mit Hilfe von Raum `

 @Database(entities = {ProjectDataEntity.class, SavedProjectEntity.class},
    version = 2)
 @TypeConverters(DateConverter.class)

 public abstract class AppDatabase extends RoomDatabase {

 static final String DATABASE_NAME = "photex_db";

 private static AppDatabase Instance;

 public abstract ProjectDataDao projectDataDao();

 public abstract SavedProjectDao savedProjectDao();

 public static AppDatabase getInstance(Context context) {
    if (Instance == null) {
        synchronized (AppDatabase.class) {
            if (Instance == null) {
                Instance = 
  Room.databaseBuilder(context.getApplicationContext(),
                        AppDatabase.class, DATABASE_NAME)
                        .build();
            }
        }
    }
    return Instance;
}

} `

14
Usman Saeed
static final String DATABASE_NAME = "photex_db";

Hier versuchen Sie, photoex_db zu öffnen.

String currentDBPath=getDatabasePath("photex_db.db").getAbsolutePath();

Hier versuchen Sie, von photex_db.db zu lesen.

Das ist nicht dasselbe.

Sie könnten erwägen, DATABASE_NAME durchgängig und nicht nur an einigen Stellen zu verwenden.

14
CommonsWare

Es gab einen kleinen Fehler in meinem Code, nachdem ich seine Funktionsweise korrigiert hatte 

private void copyFile() {
    try {
        File sd = Environment.getExternalStorageDirectory();
        File data = Environment.getDataDirectory();

        if (sd.canWrite()) {
            String currentDBPath =
                    getDatabasePath("photex_db").getAbsolutePath();
            String backupDBPath = "photex_db.db";
            //previous wrong  code  
            // **File currentDB = new File(data,currentDBPath);**
            // correct code
            File currentDB = new File(currentDBPath);
            File backupDB = new File(sd, backupDBPath);

            if (currentDB.exists()) {
                FileChannel src = new FileInputStream(currentDB).getChannel();
                FileChannel dst = new FileOutputStream(backupDB).getChannel();
                dst.transferFrom(src, 0, src.size());
                src.close();
                dst.close();
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}
5
Usman Saeed

in Android Studio befindet sich rechts unten ein Abschnitt mit dem Namen "Device File Explorer". In diesem Abschnitt können Sie alle Dateien überprüfen (Die Sie in einer einfachen Datei-Explorer-App nicht sehen können, da Sie den Stamm ausführen müssen).

Vergewissern Sie sich, dass der Emulator derjenige ist, mit dem Sie arbeiten. In diesem Explorer müssen Sie zu "Daten" -> "Daten" gehen, nach dem Paketnamen Ihrer App suchen und den nächsten Schritt zum Suchen der Datenbank suchen "Eintrag, in diesem Ordner befindet sich Ihre Raumdatenbank.

1
AlexPad

Probieren Sie diesen Code aus:

String backupDBPath = YourRoomDatabase.getDatabase(context).getOpenHelper().getWritableDatabase().getPath();

Es wird der Pfad Ihrer Datenbank zurückgegeben. Verwenden Sie genau diesen Pfad, um die Datei zu erstellen, an der Sie sie kopieren möchten. Es wird auf jeden Fall funktionieren, wie für mich gearbeitet.

File backupDB = new File(backupDBPath);
0
Prashant