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.
Nguồn
2013-01-24 20:41:04