2012-04-20 27 views
0

私を助けることができたら本当に感謝します。 私の問題は次のとおりです。 私のアプリケーションは2つのテーブルを持つデータベースを作成します。私はこのデータベースをバックアップしてsdにコピーしようとしています。これはエミュレータでは問題なく動作しますが、実際のデバイスではファイルはコピーされますが、SQLiteブラウザでは開くことはできません。Android。 SDカードにコピーされたデータベースを開くことができません

コピーのコードは、これは、ファイルが実際に

おかげ ジムにコピーされることを意味し、データベースのサイズを示す表

public DBSqlLiteHelper(Context context) 
{ 
    super(context, DATABASE_NAME, null, 1); 
} 
@Override 
public void onCreate(SQLiteDatabase db) 
{ 
    db.execSQL(TABLE_WORKERS_CREATE); 
    db.execSQL(TABLE_PERSONS_CREATE); 
} 
@Override 
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) { 
    // TODO Auto-generated method stub 
    arg0.execSQL("DROP TABLE IF EXISTS " + TABLE_PERSONS); 
    arg0.execSQL("DsROP TABLE IF EXISTS " + TABLE_WORKERS); 
    onCreate(arg0); 

} 

Toast.makeText(getApplicationContext(), Long.toString(src.size()) 

を作成するために、ここで

try { 
     File sd = Environment.getExternalStorageDirectory(); 
     File data = Environment.getDataDirectory(); 

     if (sd.canWrite()) { 
      String currentDBPath = getDatabasePath("fieldworker").getAbsolutePath(); 
      Toast.makeText(getApplicationContext(), currentDBPath, 2).show(); 
      String backupDBPath = "fieldworker"; 
      File currentDB = new File(currentDBPath); 
      File backupDB = new File(sd, backupDBPath); 

      if (currentDB.exists()) { 
       FileChannel src = new FileInputStream(currentDB).getChannel(); 
       Toast.makeText(getApplicationContext(), Long.toString(src.size()), 2).show(); 
       FileChannel dst = new FileOutputStream(backupDB).getChannel(); 
       dst.transferFrom(src, 0, src.size()); 
       src.close(); 
       dst.close(); 
      } 
      else 
      { 
       Toast.makeText(getApplicationContext(), "Doesnt exist", 2).show(); 
      } 
     } 
    } catch (Exception e) { 
    } 

コードです

+0

「ファイルはコピーされますが、どのSQLiteブラウザでも開くことはできません」という意味はどうですか?どのようにプラットフォーム/ OS上の任意のブラウザでsqliteファイルを開いたのですか? – k3b

+0

DDMSを使ってSDカードからファイルを取得できます。私はSQLiteデータベースブラウザv2.0を使用してそれを開こうとしたが、それは何も表示されません。 FirefoxのSQLiteのマネージャプラグインは言う:「たSQLiteManager:ファイルfieldworkerDevを開くでエラーが発生しました - のいずれかのファイル暗号化、または破損している 例外名:NS_ERROR_FILE_CORRUPTED 例外メッセージ:0x8052000b(NS_ERROR_FILE_CORRUPTED)[mozIStorageService.openUnsharedDatabase]:コンポーネントは、障害コード返された」Macを使用し – user1346743

+0

イムOS XのSnow Leopard – user1346743

答えて

0

コードが正常に実行されます。私のエミュレータと電話の両方あなたの問題はあなたのSQLiteブラウザにあると思います。たとえば、SQLite Database Browser v2.0はSQLite v2用に設計されています。 AndroidはSQLite v3の書式設定を使用します。 Android SDKに含まれているSQLite3コマンドラインツールを使用して、コピーしたデータベースを開いてみてください。

+0

ありがとう!それが助けになった! – user1346743

+0

問題はありません。この回答を確認して、問題が解決したことを皆に見せてください。 – Sam

関連する問題