将数据库.db文件转换为.csv

时间:2011-12-29 07:24:25

标签: android sqlite

我正在开发一个应用程序,我在其中使用数据库并将带有.db扩展名的数据库文件存储到sdcard中。现在我想将此“db文件转换为.csv”,以便用户可以打开该.csv文件,可以很容易地看到它的所有数据...

1 个答案:

答案 0 :(得分:9)

嘿,我得到了自己问题的答案:我下载了一个OpenCSV库,并将opencsv.jar文件添加到我的应用程序中,代码如下:

class ExportDatabaseCSVTask extends AsyncTask<String, Void, Boolean>{
    private final ProgressDialog dialog = new ProgressDialog(MyDatabaseActivity.this);

    // can use UI thread here
    @Override
    protected void onPreExecute(){
        this.dialog.setMessage("Exporting database...");
        this.dialog.show();
    }


    // automatically done on worker thread (separate from UI thread)
    protected Boolean doInBackground(final String... args){
        File dbFile=getDatabasePath("mydb.db");
        //  DbClass DBob = new DbClass(MyDatabaseActivity.this);
        File exportDir = new File(Environment.getExternalStorageDirectory(), "");
        if (!exportDir.exists()) {
            exportDir.mkdirs();
        }
        File file = new File(exportDir, "excerDB.csv");
        try {
            file.createNewFile();
            CSVWriter csvWrite = new CSVWriter(new FileWriter(file));
            //SQLiteDatabase db = DBob.getReadableDatabase();
            Cursor curCSV=mydb.rawQuery("select * from " + TableName_ans,null);
            //  Cursor curCSV = db.rawQuery("SELECT * FROM table_ans12",null);
            csvWrite.writeNext(curCSV.getColumnNames());

            while(curCSV.moveToNext()){
                String arrStr[] ={curCSV.getString(0),curCSV.getString(1)};
                    /*curCSV.getString(2),curCSV.getString(3),curCSV.getString(4)*/
                csvWrite.writeNext(arrStr);
            }

            csvWrite.close();
            curCSV.close();
            return true;

        } catch(SQLException sqlEx) {
            Log.e("MainActivity", sqlEx.getMessage(), sqlEx);
            return false;
        } catch (IOException e) {
            Log.e("MainActivity", e.getMessage(), e);
            return false;
        }
    }

    // can use UI thread here
    @Override
    protected void onPostExecute(final Boolean success) {
        if (this.dialog.isShowing()) {
            this.dialog.dismiss();
        }
        if (success) {
            Toast.makeText(MyDatabaseActivity.this, "Export successful!", Toast.LENGTH_SHORT).show();
        }  else {
            Toast.makeText(MyDatabaseActivity.this, "Export failed", Toast.LENGTH_SHORT).show();
        }
    }
}