【问题标题】:Convert database .db file into .csv将数据库 .db 文件转换为 .csv
【发布时间】:2011-12-29 07:24:24
【问题描述】:

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

【问题讨论】:

    标签: android sqlite


    【解决方案1】:

    嘿,我得到了我自己问题的答案:我下载了一个库 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();
            }
        }
    }
    

    【讨论】:

    • 如何将每个月的记录放在新列中是 .csv 或 excel。例如在columnt A 中有一月份的记录,在Column B 有二月份的记录.....
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-20
    • 2016-05-21
    • 2013-02-03
    • 2018-02-12
    • 2019-09-11
    • 1970-01-01
    • 2013-09-09
    相关资源
    最近更新 更多