从sqlite db文件(Android)转换的formatted.csv文件不正确

时间:2016-10-18 14:34:40

标签: android sqlite csv

在我的Android应用中,我将SQLite .db文件转换为.csv文件并保存在外部存储设备上 - 此部分已经很好了。

然而,尽管存在所有数据,即23列,并且当我输入一组样本数据时,输出看起来像:

  

" column_1_heading"" column_2_heading"" column_1_data"" column_2_data",

其中所有内容都在一行中,并用引号括起来。

我所追求的是它在不同的行中,没有引号,例如:

  

column_1_heading,column_2_heading
  column_1_data,column_2_data

它们不需要按列排列,只需按顺序排列。

我用来执行转换的代码强烈基于this answer,其代码转载如下:

        File dbFile=getDatabasePath("MyDBName.db");
        DBHelper dbhelper = new DBHelper(getApplicationContext());
        File exportDir = new File(Environment.getExternalStorageDirectory(), "");
        if (!exportDir.exists())
        {
            exportDir.mkdirs();
        }

        File file = new File(exportDir, "csvname.csv");
        try
        {
            file.createNewFile();
            CSVWriter csvWrite = new CSVWriter(new FileWriter(file));
            SQLiteDatabase db = dbhelper.getReadableDatabase();
            Cursor curCSV = db.rawQuery("SELECT * FROM contacts",null);
            csvWrite.writeNext(curCSV.getColumnNames());
            while(curCSV.moveToNext())
            {
                //Which column you want to exprort
                String arrStr[] ={curCSV.getString(0),curCSV.getString(1), curCSV.getString(2)};
                csvWrite.writeNext(arrStr);
            }
            csvWrite.close();
            curCSV.close();
        }
        catch(Exception sqlEx)
        {
            Log.e("MainActivity", sqlEx.getMessage(), sqlEx);
        }

是否需要进行更改以使输出.csv文件与所需的输出匹配?

1 个答案:

答案 0 :(得分:0)

解决方案很好而且快速,并且需要对原始代码的一行进行非常小的更改。

该行:

CSVWriter csvWrite = new CSVWriter(new FileWriter(file));

只需要改写为:

CSVWriter csvWrite = new CSVWriter(new FileWriter(file), CSVWriter.NO_QUOTE_CHARACTER, "\r\n");

因为它适合我的工作。

一些研究的一些解释。根据{{​​3}}:

顾名思义,

CSVWriter documentation会抑制所有引号。

NO_QUOTE_CHARACTER页面中,"\r\n""\n"甚至Constant Field Values可用作默认行终止符。

观察到的包括这两者的效果消除了所有引号并将每一行分开。