2013-01-24 41 views
5

私のsqliteデータベースからデータを取得し、csvファイルに書き込んで、write.iが完了したときに情報を電子メールしようとすると、database.iの3つの列を持つ1つのテーブルにDBAdapterとクラスユーザーがデータをエクスポートできるようにするために押す必要のあるボタン。ここでcsvにエクスポートsqlite

私はこのコードは、SDカード内のファイルを作成していますが、問題は、私は、これはSQLiteのデータベースのデータを取るために作成し、ファイルに書き込むカントあるExportdata.java

try { 
    root = Environment.getExternalStorageDirectory();     
    Log.i(TAG,"path.." +root.getAbsolutePath()); 

    //check sdcard permission 
    if (root.canWrite()) { 
     File fileDir = new File(root.getAbsolutePath()+"/fun/"); 
     fileDir.mkdirs(); 

     // Log.d("DATABASE", db.getAllBYname()); 

     File file= new File(fileDir, "itisfun.csv"); 
     FileWriter filewriter = new FileWriter(file); 
     BufferedWriter out = new BufferedWriter(filewriter); 
     out.write("I m enjoying......dude..............." ); 
     out.close(); 
    } 
} catch (IOException e) { 
    Log.e("ERROR:---", "Could not write file to SDCard" + e.getMessage()); 
} 

を試してみましたコードですcode.im stuckで示されているように、適切なソリューションで私のコードを編集したり編集したりしてください。

答えて

10

私はCSV形式でSDカード上のファイルにSQLiteのデータベースをダンプするために、このルーチンを使用します。

private Boolean backupDatabaseCSV(String outFileName) { 
    MyLog.d(TAG, "backupDatabaseCSV"); 
    Boolean returnCode = false; 
    int i = 0; 
    String csvHeader = ""; 
    String csvValues = ""; 
    for (i = 0; i < GC.CURCOND_COLUMN_NAMES.length; i++) { 
     if (csvHeader.length() > 0) { 
      csvHeader += ","; 
     } 
     csvHeader += "\"" + GC.CURCOND_COLUMN_NAMES[i] + "\""; 
    } 

    csvHeader += "\n"; 
    MyLog.d(TAG, "header=" + csvHeader); 
    dbAdapter.open(); 
    try { 
     File outFile = new File(outFileName); 
     FileWriter fileWriter = new FileWriter(outFile); 
     BufferedWriter out = new BufferedWriter(fileWriter); 
     Cursor cursor = dbAdapter.getAllRows(); 
     if (cursor != null) { 
      out.write(csvHeader); 
      while (cursor.moveToNext()) { 
       csvValues = Long.toString(cursor.getLong(0)) + ","; 
       csvValues += Double.toString(cursor.getDouble(1)) 
         + ","; 
       csvValues += Double.toString(cursor.getDouble(2)) 
         + ","; 
       csvValues += "\"" + cursor.getString(3) + "\","; 
       csvValues += Double.toString(cursor.getDouble(4)) 
         + ","; 
       csvValues += Double.toString(cursor.getDouble(5)) 
         + ","; 
       csvValues += "\"" + cursor.getString(6) + "\","; 
       csvValues += Double.toString(cursor.getDouble(7)) 
         + ","; 
       csvValues += Double.toString(cursor.getDouble(8)) 
         + ","; 
       csvValues += Double.toString(cursor.getDouble(9)) 
         + "\n"; 
       out.write(csvValues); 
      } 
      cursor.close(); 
     } 
     out.close(); 
     returnCode = true; 
    } catch (IOException e) { 
     returnCode = false; 
     MyLog.d(TAG, "IOException: " + e.getMessage()); 
    } 
    dbAdapter.close(); 
    return returnCode; 
} 

GCは、とりわけ表の列名が含まれている私のグローバル定数クラスです。列名は、CSVファイルのヘッダー行を作成するために使用されます。 getAllRowsはデータベースアダプタ内にあり、テーブル内のすべての行を返します。 whileは返されたすべての行をダンプします。長い値はコンマで区切られ、テキスト値は引用符で囲まれ、コンマで区切られます。 MyLog.dはテストモードでLog.dを実行し、プロダクションモードでは何もしません。 dbAdapterは、グローバル変数として関数の外で定義されている:それは次のようにのonCreateで初期化され

DatabaseAdapter dbAdapter = null; 

dbAdapter = new DatabaseAdapter(getApplicationContext()); 

dbAdapterは活性で複数の機能に使用されます。データベースアダプタをグローバルに定義する場合は、必ずdbAdapter.open()をdbAdapter.close()と組み合わせて使用​​してください。また、開いているすべてのカーソルを閉じることを忘れないでください。

注:csvValuesは、各SQLite行で返される列の連結です。 SQLiteカーソルで返された各行に対して、csvValuesはCSVテーブルの行として書き込まれます。

関連する問題