私は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テーブルの行として書き込まれます。