2013-01-24 13 views
5

ich versuche, daten aus meiner sqlite-datenbank und schreiben sie in csv-datei und email die informationen wenn fertig write.i habe nur eine tabelle mit 3 spalten in der database.i haben DBAdapter und eine klasse, die haben Die Schaltfläche, die der Benutzer drücken muss, um die Daten exportieren zu können.export sqlite in csv

Hier ist der Code i 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()); 
} 

Dieser Code versucht haben, wird die Datei in SD-Karte erstellen, aber das Problem ist, ich kann diese SQLite-Datenbank Daten zu nehmen und machen es in die Datei schreiben wie auf dem code.im stecken bitte helfe mir mit beispiel oder bearbeite meinen code mit der richtigen lösung.

Antwort

10

Ich benutze diese Routine eine SQLite-Datenbank auf der SD-Karte im CSV-Format in einer Datei zu speichern:

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 meine Globale Konstanten Klasse ist, die die Tabellenspaltennamen unter anderem enthält. Die Spaltennamen werden verwendet, um die Kopfzeile in der CSV-Datei zu erstellen. Der getAllRows befindet sich im Datenbankadapter und gibt alle Zeilen in der Tabelle zurück. Die while-Datei löscht alle Zeilen, die zurückgegeben wurden. Die langen Werte sind durch Kommas getrennt und die Textwerte werden in Anführungszeichen gesetzt und durch ein Komma getrennt. Der MyLog.d führt im Testmodus einen Log.d aus und im Produktionsmodus nichts. Die dbAdapter ist außerhalb der Funktion als globale Variable definiert:

DatabaseAdapter dbAdapter = null; 

Es wird initialisiert in onCreate als:

dbAdapter = new DatabaseAdapter(getApplicationContext()); 

Die dbAdapter in mehreren Funktionen in der Aktivität verwendet wird. Wenn Sie Ihren Datenbankadapter global definieren, vergewissern Sie sich, dass Sie jedes dbAdapter.open() mit einem dbAdapter.close() verbinden, wenn Sie es verwenden. Vergessen Sie auch nicht, jeden geöffneten Cursor zu schließen.

Hinweis: csvValues ​​ist eine Verkettung der Spalten, die in jeder SQLite-Zeile zurückgegeben werden. Für jede im SQLite-Cursor zurückgegebene Zeile wird csvValues ​​als Zeile in die CSV-Tabelle geschrieben.