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;
}
} `
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.
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();
}
}
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.
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);