2012-01-31 28 views
2

データベースを内部ストレージから外部にコピーしようとしていますが、データベースをコピーしていません。新しい空のsqliteファイルを作成するだけです。私が実際に逃しているアイデアは何ですか?内部ストレージから外部ストレージにアンドロイドコピーデータベースが空のデータベースを返します

public static void copyFile(String currentDBPath, String backupDBPath){ 
    try { 
     File sd = Environment.getExternalStorageDirectory(); 
     //File data = Environment.getDataDirectory(); 

     if (sd.canWrite()) { 
      File currentDB = new File(currentDBPath); 
      File backupDB = new File(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(); 
    } 
} 

をし、このようにそれを使用して::

File database = new File("/sdcard/Stam/Data/"); 
     database.mkdirs(); 
     RPCCommunicator.copyFile("/data/data/" + this.getPackageName()+ "/databases/stam_sys_tpl.sqlite","/sdcard/Stam/Data/system.sqlite"); 

だから、system.sqliteを作成していますが、それは任意のテーブルのない空のですが、これを使用してここで

は、私が使用しているものです。私がしたいことは、データを失うことなく、現在のディレクトリから新しいディレクトリにデータベースを移動することです。

なぜそれが正しく動作しないのでしょうか?

+0

拡張子は.sqliteで、.dbではありませんか? –

+0

私はかなり確信しています –

+0

通常は、外部ストレージが "/ sdcard"と呼ばれることは絶対にお勧めしません。常にEnvironment#getExternalStorageDirectory()を使用してください。また、データベースファイルへのパスを手動で構築しないで、Context#getDatabasePath( "stam_sys_tpl.sqlite")を使用してください。 – Jens

答えて

1

データベースファイルを外部ストレージにコピーできません。

外部ストレージに新しいデータベースを作成することができます。

クエリ内部データベースと、あなたのDBファイルを取得するために

+1

それは奇妙に聞こえる。簡単なテーブル&ストレートフォワードコピーで、Android 2.3でうまく動作しました。 – Jens

2

使用Context.getDataBasePath()を作成した新しいデータベースに挿入!

関連する問題