このルーチンを使用して、SQLite データベースを SD カード上のファイルに CSV 形式でダンプします。
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 は、関数の外でグローバル変数として定義されます。
DatabaseAdapter dbAdapter = null;
onCreate で次のように初期化されます。
dbAdapter = new DatabaseAdapter(getApplicationContext());
dbAdapter は、アクティビティの複数の関数で使用されます。データベース アダプタをグローバルに定義する場合は、使用するたびに、すべての dbAdapter.open() と dbAdapter.close() を必ずペアにしてください。また、開いているすべてのカーソルを閉じることを忘れないでください。
注: csvValues は、各 SQLite 行で返される列の連結です。SQLite カーソルで返される行ごとに、csvValues が CSV テーブルの行として書き込まれます。