экспортировать sqlite в csv

я пытаюсь взять данные из моей базы данных sqlite и записать их в файл csv и отправить информацию по электронной почте, когда закончу писать. У меня есть только одна таблица с 3 столбцами в базе данных. У меня есть DBAdapter и класс, у которого есть кнопка, которую пользователь должен нажать чтобы иметь возможность экспортировать данные.

Вот код, который я пробовал 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());  
} 

Этот код создает файл на SD-карте, но проблема в том, что я не могу сделать это, чтобы взять данные базы данных sqlite и записать их в файл, как показано на коде. im застрял, пожалуйста, помогите мне с примером или отредактируйте мой код с правильным решением.


person zaamm    schedule 24.01.2013    source источник


Ответы (1)


Я использую эту процедуру для создания дампа базы данных SQLite в файл на SD-карте в формате 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 — это мой класс глобальных констант, который, помимо прочего, содержит имена столбцов таблицы. Имена столбцов используются для создания строки заголовка в файле CSV. getAllRows находится в адаптере базы данных и возвращает все строки в таблице. В то время как дамп всех строк, которые были возвращены. Длинные значения разделяются запятыми, а текстовые значения заключаются в кавычки и разделяются запятыми. MyLog.d делает Log.d в тестовом режиме и ничего не делает в рабочем режиме. dbAdapter определяется вне функции как глобальная переменная:

DatabaseAdapter dbAdapter = null;

Он инициализируется в onCreate как:

dbAdapter = new DatabaseAdapter(getApplicationContext());

dbAdapter используется в нескольких функциях действия. Если вы глобально определяете свой адаптер базы данных, убедитесь, что вы связываете каждый dbAdapter.open() с dbAdapter.close() всякий раз, когда вы его используете. Кроме того, не забывайте закрывать каждый открытый вами курсор.

Примечание. csvValues ​​— это объединение столбцов, возвращаемых в каждой строке SQLite. Для каждой строки, возвращаемой в курсоре SQLite, csvValues ​​записывается как строка в таблице CSV.

person Howard Hodson    schedule 24.01.2013