Io uso questa routine per eseguire il dump di un database SQLite in un file sulla scheda SD in formato 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 è la mia classe costanti globali che tra l'altro contiene i nomi delle colonne della tabella. I nomi delle colonne vengono utilizzati per creare la riga di intestazione nel file CSV. GetAllRows si trova nell'adattatore del database e restituisce tutte le righe nella tabella. Il while esegue il dump di tutte le righe che sono state restituite. I valori lunghi sono separati da virgola e i valori di testo sono quotati e separati da una virgola. MyLog.d esegue un Log.d in modalità test e non fa nulla quando è in modalità produzione. Il dbAdapter è definita al di fuori della funzione come variabile globale:
DatabaseAdapter dbAdapter = null;
viene inizializzato in onCreate come:
dbAdapter = new DatabaseAdapter(getApplicationContext());
il dbAdapter è utilizzato in molteplici funzioni nell'attività. Se definisci globalmente la scheda Database, assicurati di associare ogni dbAdapter.open() a dbAdapter.close() ogni volta che lo usi. Inoltre, non dimenticare di chiudere ogni cursore che apri.
Nota: csvValues è una concatenazione delle colonne restituite in ciascuna riga SQLite. Per ogni riga restituita nel cursore SQLite, csvValues viene scritto come una riga nella tabella CSV.
fonte
2013-01-24 20:41:04