2013-01-24 32 views
5

मैं अपने एसक्लाइट डेटाबेस से डेटा लेने की कोशिश कर रहा हूं और इसे सीएसवी फ़ाइल में लिख रहा हूं और लिखने के दौरान सूचना ईमेल कर रहा हूं। मेरे पास डेटाबेस में 3 कॉलम के साथ केवल एक टेबल है। मेरे पास डीबीएडाप्टर और एक क्लास है वह बटन जिसे उपयोगकर्ता को डेटा निर्यात करने में सक्षम होने के लिए दबाया जाना चाहिए।निर्यात एसक्लाइट सीएसवी

यहाँ कोड मैं 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()); 
} 

इस कोड को एसडी कार्ड में फ़ाइल पैदा करता है लेकिन समस्या यह है मैं नहीं कर सकते यह SQLite डेटाबेस डेटा लेने के लिए और फ़ाइल में लिखने के लिए करना है की कोशिश की है है जैसा कि कोड.आईएम पर दिखाया गया है कृपया मुझे उदाहरण के साथ मदद करें या सही समाधान के साथ अपना कोड संपादित करें।

उत्तर

10

मैं सीएसवी प्रारूप में एसडी कार्ड पर एक फाइल करने के लिए एक 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; 
} 

जीसी मेरी वैश्विक स्थिरांक वर्ग जो अन्य बातों के अलावा तालिका कॉलम के नाम होते है। स्तंभ नामों को सीएसवी फ़ाइल में हेडर पंक्ति बनाने के लिए उपयोग किया जाता है। GetAllRows डेटाबेस एडाप्टर में है और तालिका में सभी पंक्तियां देता है। जबकि लौटाई गई सभी पंक्तियों को डंप करता है। लंबे मूल्य अल्पविराम से अलग होते हैं और पाठ मानों को उद्धृत किया जाता है साथ ही अल्पविराम से अलग किया जाता है। MyLog.d परीक्षण मोड में Log.d करता है और उत्पादन मोड में कुछ भी नहीं करता है। dbAdapter एक वैश्विक चर के रूप में समारोह के बाहर परिभाषित किया गया है:

dbAdapter = new DatabaseAdapter(getApplicationContext()); 

dbAdapter गतिविधि में कई कार्यों में प्रयोग किया जाता है:

DatabaseAdapter dbAdapter = null; 

यह रूप में onCreate में आरंभ नहीं हो जाता। यदि आप वैश्विक रूप से अपने डेटाबेस एडाप्टर को परिभाषित करते हैं, तो सुनिश्चित करें कि आप प्रत्येक dbAdapter.open() को dbAdapter.close() के साथ जोड़ते हैं जब भी आप इसका उपयोग करते हैं। साथ ही, आपके द्वारा खोले गए प्रत्येक कर्सर को बंद करना न भूलें।

नोट: csvValues ​​प्रत्येक SQLite पंक्ति में दिए गए कॉलम का एक संयोजन है। SQL पंक्ति कर्सर में लौटाई गई प्रत्येक पंक्ति के लिए, CSV तालिका में csvValues ​​को पंक्ति के रूप में लिखा जाता है।