在我的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文件与所需的输出匹配?
答案 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可用作默认行终止符。
观察到的包括这两者的效果消除了所有引号并将每一行分开。