2013-01-24 16 views
5

sqlite veri tabanımdan veri alıp csv dosyasına yazmayı ve yazma işlemi bittiğinde bilgileri e-postayla göndermeyi istiyorum.i veritabanında 3 sütun içeren bir tablo var.i DBAdapter ve bir sınıf var Verileri dışa aktarmak için kullanıcının basması gereken düğme. İşte sqlite'i csv'ye aktarıyor

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()); 
} 

Bu kod sdcard dosyayı oluşturmak yapar ama sorun ben bu sqlite veritabanı verilerini alıp dosyaya yazmak için yapmak cant denedim kodudur code.im'de gösterildiği gibi, lütfen bana örnek olarak yardım edin veya kodumu doğru çözümle düzenleyin.

cevap

10

CSV formatında SD kart üzerinde bir dosyaya Bir SQLite veritabanı dökümünü almak için bu rutin kullanın:

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 diğer şeylerin yanı sıra Tablo sütun adlarını içeren benim genel sabitleri sınıftır. Sütun adları, başlık satırını CSV dosyasında yapmak için kullanılır. GetAllRows, veritabanı bağdaştırıcısındadır ve tablodaki tüm satırları döndürür. Zaman geri gönderilen tüm satırları döker. Uzun değerler virgülle ayrılır ve metin değerleri bir virgülle ayrıldığı gibi ayrılır. MyLog.d test modunda bir Log.d yapar ve üretim modunda hiçbir şey yapmaz. dbAdapter genel değişken olarak işlev dışında tanımlanır: dbAdapter aktivitesinde çok fonksiyonları kullanılır

dbAdapter = new DatabaseAdapter(getApplicationContext()); 

:

DatabaseAdapter dbAdapter = null; 

Bu şekilde onCreate başlatılır. Veritabanı bağdaştırıcınızı global olarak tanımlarsanız, her dbAdapter.open() öğesini dbAdapter.close() ile her kullandığınızda eşleştirdiğinizden emin olun. Ayrıca, açtığınız her imleci kapatmayı da unutmayın.

Not: csvValues, her SQLite satırında döndürülen sütunların birleşimidir. SQLite imlecinde döndürülen her satır için, csvValues ​​CSV tablosunda bir satır olarak yazılır.

İlgili konular