web-dev-qa-db-fra.com

Où Room sauver la base de données Android?

J'utilise la bibliothèque de salle pour enregistrer des données dans la base de données.Je veux obtenir la base de données.

utilisé ce 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();
    }
}

cela fonctionne dans sqlLite simple mais ne fonctionnait pas pour ROOM Library ROOM

est-il possible d'obtenir une base de données?

Classe pour créer une base de données à l'aide de Room `

 @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";

Ici, vous essayez d'ouvrir photoex_db.

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

Ici, vous essayez de lire à partir de photex_db.db.

Ce ne sont pas les mêmes.

Vous pouvez envisager d'utiliser DATABASE_NAME de manière cohérente, plutôt que seulement à certains endroits.

14
CommonsWare

Il y avait une petite erreur dans mon code, après avoir corrigé son bon fonctionnement 

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

dans Android Studio, une section intitulée "Explorateur de fichiers de périphérique" se trouve en bas à droite. Dans cette section, vous pouvez explorer tous les fichiers (Que vous ne pouvez pas voir dans une simple application Explorateur de fichiers car vous devez exécuter la racine).

Assurez-vous que l'émulateur est bien celui avec lequel vous travaillez . Dans cet explorateur, vous devez aller dans "données" -> "données", rechercher le nom du package de votre application et l'étape suivante consiste à trouver la "base de données". "entrée, dans ce dossier se trouve votre base de données Room.

1
AlexPad

Essayez ce code:

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

Il renverra le chemin de votre base de données. Utilisez ce chemin exact pour créer le fichier où vous souhaitez le copier. Cela fonctionnera certainement comme travaillé pour moi.

File backupDB = new File(backupDBPath);
0
Prashant