J'ai copié une base de données à partir du stockage interne à externe, mais il semble que quelque chose n'allait pas. Parce qu'il n'y a pas de table dedans. Je sens juste qu'un fichier vide est créé. Pendant ce temps, j'ai utilisé ActiveAndroid pour créer le fichier de base de données source et utiliser Filechanel pour copier le fichierJ'ai copié la base de données sur le stockage externe. mais il n'a pas de tables source
public class DbExportImport {
/** Directory that files are to be read from and written to **/
protected static final File DATABASE_DIRECTORY =
new File(Environment.getExternalStorageDirectory(),"mydirectory");
public static final String PACKAGE_NAME = "example.com.testp";
public static final String DATABASE_NAME = "database1.db";
/** Contains: /data/data/com.example.app/databases/example.db **/
private static final File DATA_DIRECTORY_DATABASE =
new File(Environment.getDataDirectory() +
"/data/" + PACKAGE_NAME +
"/databases/" + DATABASE_NAME);
public static boolean exportDb(){
// if external torage is present
if(! SdIsPresent()) return false;
File dbFile = DATA_DIRECTORY_DATABASE;
String filename = "backupdb.db";
File exportDir = DATABASE_DIRECTORY;
File file = new File(exportDir, filename);
if (!exportDir.exists()) {
exportDir.mkdirs();
}
try {
file.createNewFile();
copyFile(dbFile, file);
return true;
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
private static void copyFile(File src, File dst) throws IOException {
FileChannel inChannel = new FileInputStream(src).getChannel();
FileChannel outChannel = new FileOutputStream(dst).getChannel();
try {
inChannel.transferTo(0, inChannel.size(), outChannel);
} finally {
if (inChannel != null)
inChannel.close();
if (outChannel != null)
outChannel.close();
}
}
Qu'est-ce qui vous fait penser qu'il n'a pas de tables? Aucun du code ci-dessus n'essaie de regarder la base de données comme une base de données sqlite qu'il traite simplement comme un fichier ordinaire. – MikeT
bonjour. Je vois dans la base de données copiée avec sqlite3 programme de ligne de commande. mais il n'y a pas de table dedans. – hassan
Vous avez probablement ouvert la base de données avec une commande/méthode sqlite lorsqu'elle n'existait pas et donc la base de données a été créée sans tables. par exemple. 'SQLiteDatabase db = openOrCreateDatabase (" mydb ", MODE_PRIVATE, null);' fera exactement cela. – MikeT