1

を使用して、データベースファイルをAndroid携帯の外部メモリにエクスポートしようとしています

private final String DB_NAME = "MemberData";
private final String TABLE_NAME = "MemberDB";

 //Get a reference to the database
    File dbFile = this.getDatabasePath(DB_NAME);
    //Get a reference to the directory location for the backup
    File exportDir = new File(Environment.getExternalStorageDirectory(), "myAppBackups");
    if (!exportDir.exists()) {
      exportDir.mkdirs();
    }
    File backup = new File(exportDir, dbFile.getName());
    //Check the required operation String command = params[0];

    //Attempt file copy
    try {
      backup.createNewFile();
      fileCopy(dbFile, backup);
    } catch (IOException e) {
      /*Handle File Error*/ 
    }

private void fileCopy(File source, File dest) throws IOException {
      FileChannel inChannel = new FileInputStream(source).getChannel();
      FileChannel outChannel = new FileOutputStream(dest).getChannel();
      try {
        inChannel.transferTo(0, inChannel.size(), outChannel);
      } finally {
        if (inChannel != null) inChannel.close();
        if (outChannel != null) outChannel.close();
      }
    }

ディレクトリ名「myappsbackup」を作成できましたが、データベースをコピーできませんでした。サイズは常に 0 で、テーブルがありません。コピーの仕方がおかしいのでしょうか。

4

1 に答える 1

0

SQLite データベースを SD カードに書き込みまたはバックアップするために使用するコードを次に示します。

try {
 db.open();
 File newFile = new File("/sdcard/Your File Name Here");
InputStream input = new FileInputStream(
"/data/data/com.packageNameHere/databases/DB Name Here");

        OutputStream output = new FileOutputStream(newFile);
        byte[] buffer = new byte[1024];
        int length;
        while ((length = input.read(buffer)) > 0) {
            output.write(buffer, 0, length);
        }
        output.flush();
        output.close();
        input.close();
        db.close();

    } catch (FileNotFoundException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
于 2012-11-27T21:11:26.740 に答える