2013-01-24 33 views
5

im cố gắng lấy dữ liệu từ cơ sở dữ liệu sqlite của tôi và ghi nó vào tệp csv và gửi email thông tin khi viết xong. Tôi chỉ có một Bảng với 3 cột trong database.i có DBAdapter và một lớp có Nút mà người dùng phải nhấn để có thể xuất dữ liệu.xuất sqlite vào csv

Đây là mã tôi đã cố gắng 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()); 
} 

Mã này không tạo ra các tập tin trong SDcard nhưng vấn đề là tôi không thể làm điều này để lấy dữ liệu cơ sở dữ liệu SQLite và viết nó trong file như được hiển thị trên code.im bị mắc kẹt xin vui lòng giúp tôi với ví dụ hoặc chỉnh sửa mã của tôi với các giải pháp đúng.

Trả lời

10

tôi sử dụng thói quen này để đổ một cơ sở dữ liệu SQLite vào một tập tin trên thẻ SD ở định dạng 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 là lớp toàn cầu hằng của tôi mà trong số những thứ khác có chứa các tên cột bảng. Tên cột được sử dụng để tạo hàng tiêu đề trong tệp CSV. GetAllRows nằm trong bộ điều hợp cơ sở dữ liệu và trả về tất cả các hàng trong bảng. Trong khi bãi chứa tất cả các hàng đã được trả lại. Các giá trị dài được phân cách bằng dấu phẩy và các giá trị văn bản được trích dẫn cũng như được phân tách bằng dấu phẩy. MyLog.d thực hiện Log.d trong chế độ kiểm tra và không làm gì khi ở chế độ sản xuất. Các dbAdapter được định nghĩa bên ngoài của hàm như là một biến toàn cầu:

DatabaseAdapter dbAdapter = null; 

Nó được khởi tạo trong onCreate như:

dbAdapter = new DatabaseAdapter(getApplicationContext()); 

các dbAdapter được sử dụng trong nhiều chức năng trong hoạt động này. Nếu bạn định nghĩa toàn bộ bộ điều hợp Cơ sở dữ liệu của mình, hãy chắc chắn rằng bạn ghép nối mọi dbAdapter.open() với một dbAdapter.close() bất cứ khi nào bạn sử dụng nó. Ngoài ra, đừng quên đóng mọi con trỏ bạn mở.

Lưu ý: csvValues ​​là một kết nối của các cột được trả lại trong mỗi hàng SQLite. Đối với mỗi hàng được trả về trong con trỏ SQLite, csvValues ​​được viết dưới dạng một hàng trong bảng CSV.