2012-04-23 23 views
0

私はアンドロイドアプリでデータベースを作成してから、ステートメントを挿入しました。すべてうまくいったので、私は自分のデータベースをMY_PACKAGE/databses /に入れて、それをsdカードにコピーして到達可能にしたかったのです。sqliteを開くときに例外が発生する

これは働いたが、私は私のsqliteのFirefoxのプラグインで開こうとすると、私はこのエラーを取得:

SQLiteManager: Error in opening file Datas.sqlite - either the file is encrypted or corrupt 
Exception Name: NS_ERROR_FILE_CORRUPTED 
Exception Message: Component returned failure code: 0x8052000b (NS_ERROR_FILE_CORRUPTED) [mozIStorageService.openUnsharedDatabase] 

は、たぶん私は何か他のもので開くために持っているか、私はそう簡単にこれを開くことができませんか?

私は私が使用するすべてのコードを提供します:SDカードにこの方法を、それをコピー

Using your own SQLite database in Android applications

public static boolean backUpDataBase(Context context) { 

     final String DATABASE_NAME = "Data.sqlite"; 
     final String DATABASE_NAME_FULL = "/data/data/package/databases/" 
       + DATABASE_NAME; 
     boolean result = true; 

     // Source path in the application database folder 
     String appDbPath = DATABASE_NAME_FULL; 

     // Destination Path to the sdcard app folder 
     String sdFolder = Environment.getExternalStorageDirectory() 
       .getAbsolutePath() + "/" + "Datas.sqlite"; 

     File f = new File(sdFolder); 
     // if (!f.exists()) { 
     // f.mkdir(); 
     // } 

     InputStream myInput = null; 
     OutputStream myOutput = null; 
     try { 
      // Open your local db as the input stream 
      myInput = new FileInputStream(appDbPath); 
      // Open the empty db as the output stream 
      myOutput = new FileOutputStream(f); 

      // transfer bytes from the inputfile to the outputfile 
      byte[] buffer = new byte[1024]; 
      int length; 
      while ((length = myInput.read(buffer)) > 0) { 
       myOutput.write(buffer, 0, length); 
      } 
     } catch (IOException e) { 
      result = false; 
      e.printStackTrace(); 
     } finally { 
      try { 
       // Close the streams 
       if (myOutput != null) { 
        myOutput.flush(); 
        myOutput.close(); 
       } 
       if (myInput != null) { 
        myInput.close(); 
       } 
      } catch (IOException e) { 
      } 
     } 

     return result; 
    } 

私はこのすべてのコードを使用し

は私のデシベルの取り扱いデータベースは次のようになります: 2テーブル:

私が必要とするすべて行うには
CREATE TABLE "Test" ("_id" INTEGER PRIMARY KEY NOT NULL UNIQUE , "Info" TEXT) 

CREATE TABLE "android_metadata" ("locale" TEXT DEFAULT 'en_US') 

とコード:読み取りと DataBaseHelperデータベース= Main.createOrOpenDB(mContext)を書き込むれる

//戻りdatabseを。

どこが間違っていますか?

答えて

0

SDカードに書き込むコードに問題があるようです(すぐには見えません)。

なぜSDCardにコピーしているのでしょうか?単にファイルをチェックしたいと思うように聞こえます。

実際にあなたの目標であれば、エミュレータを実行し、単にEclipseからDDMSビューを使用し、ファイルにナビゲートし、上部のボタンをクリックすることをお勧めしますツールチップに「デバイスからファイルを引き出す」と書かれています。あなたがエミュレータで取得するものは、あなたの携帯電話で取得するものと正確に一致する必要があります。

関連する問題