CSV文件写入问题android sqlite数据库

CSV文件写入问题android sqlite数据库,android,sqlite,csv,Android,Sqlite,Csv,我正在开发一个应用程序,我需要使用不同的id从sqlite数据库检索数据,我做了很多工作,但我的问题是,当我制作CSV文件时,我也会得到每个id的列名 就像我得到了这种类型的CSV文件 我正在使用这个代码 public void getData() { File dbFile = getDatabasePath("formantime.db"); SQLITEDBTABLE dbhelper = new SQLITEDBTABLE(getApplicationCon

我正在开发一个应用程序,我需要使用不同的id从sqlite数据库检索数据,我做了很多工作,但我的问题是,当我制作CSV文件时,我也会得到每个id的列名 就像我得到了这种类型的CSV文件

我正在使用这个代码

    public void getData() {


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

    file = new File(exportDir, "FTSData.csv");

    try {
        file.createNewFile();
        CSVWriter csvWrite = new CSVWriter(new FileWriter(file));
        SQLiteDatabase db = dbhelper.getReadableDatabase();

        for (String ids : TimeEntryListViewAdapter.emailintArrayList) {


            curCSV = db.rawQuery("SELECT * FROM RecordsTable WHERE RecordId ='" + ids + "'", null);
            csvWrite.writeNext(curCSV.getColumnNames());
            if (curCSV.moveToFirst()) {
                do {
                    //Which column you want to exprort

                    String[] arrStr = {curCSV.getString(0), curCSV.getString(1), curCSV.getString(2), curCSV.getString(3),
                            curCSV.getString(4), curCSV.getString(5), curCSV.getString(6)};
                    csvWrite.writeNext(arrStr);

                } while (curCSV.moveToNext());


            }
            curCSV.close();
        }

        csvWrite.close();
    } catch (Exception sqlEx) {
        Log.e("MainActivity", sqlEx.getMessage(), sqlEx);
    }


    Uri u1 = null;
    u1 = Uri.fromFile(file);


    String[] emails;
    ArrayList<String> mails = EmailReportsAdapter.emailsList;
    Intent sendIntent = new Intent(Intent.ACTION_SEND);
    sendIntent.setType("text/richtext");
    sendIntent.putExtra(Intent.EXTRA_EMAIL, mails.toArray(new String[mails.size()]));
    sendIntent.putExtra(Intent.EXTRA_STREAM, u1);
    try {
        startActivity(Intent.createChooser(sendIntent, "Sending mail.."));

    } catch (android.content.ActivityNotFoundException ex) {

        Toast.makeText(EmailReports.this, "There are no email clients installed.", Toast.LENGTH_SHORT).show();

    }
    TimeEntryListViewAdapter.emailintArrayList.clear();

}
public void getData(){
File dbFile=getDatabasePath(“formantime.db”);
SQLITEDBTABLE dbhelper=新的SQLITEDBTABLE(getApplicationContext());
File exportDir=新文件(Environment.getExternalStorageDirectory(),“”);
如果(!exportDir.exists()){
exportDir.mkdirs();
}
文件=新文件(exportDir,“FTSData.csv”);
试一试{
createNewFile();
CSVWriter csvWrite=新的CSVWriter(新的文件编写器(文件));
SQLiteDatabase db=dbhelper.getReadableDatabase();
for(字符串ID:TimeEntryListViewAdapter.emailintArrayList){
curCSV=db.rawQuery(“从RecordsTable中选择*,其中RecordId=”+ids+”,null);
csvWrite.writeNext(curCSV.getColumnNames());
if(curCSV.moveToFirst()){
做{
//您要导出哪个列
字符串[]arrStr={curCSV.getString(0)、curCSV.getString(1)、curCSV.getString(2)、curCSV.getString(3),
curCSV.getString(4)、curCSV.getString(5)、curCSV.getString(6)};
csvWrite.writeNext(arrStr);
}while(curCSV.moveToNext());
}
curCSV.close();
}
csvWrite.close();
}catch(异常sqlEx){
Log.e(“MainActivity”,sqlEx.getMessage(),sqlEx);
}
uriu1=null;
u1=Uri.fromFile(文件);
字符串[]电子邮件;
ArrayList mails=EmailReportsAdapter.emailsList;
Intent sendIntent=新的Intent(Intent.ACTION\U SEND);
setType(“text/richtext”);
sendIntent.putExtra(Intent.EXTRA_EMAIL,mails.toArray(新字符串[mails.size()]);
sendIntent.putExtra(Intent.EXTRA_流,u1);
试一试{
startActivity(Intent.createChooser(sendIntent,“发送邮件…”);
}捕获(android.content.ActivityNotFoundException ex){
Toast.makeText(EmailReports.this,“没有安装电子邮件客户端。”,Toast.LENGTH_SHORT.show();
}
TimeEntryListViewAdapter.emailintArrayList.clear();
}
}


请帮助我

这是因为每次找到新id时都会写入列名

我在这里假设您可能希望动态获取columnnames,所以我获取了一个虚拟条目

curCSV=db.rawQuery(“从RecordsTable中选择*,其中RecordId='1',null)

像这样试试

try {
             file.createNewFile();
             CSVWriter csvWrite = new CSVWriter(new FileWriter(file));
             SQLiteDatabase db = dbhelper.getReadableDatabase();

             /* fetch a dummy entry */
             curCSV = db.rawQuery("SELECT * FROM RecordsTable WHERE RecordId ='1'", null);

             csvWrite.writeNext(curCSV.getColumnNames()); // write column names only once.

             for (String ids : TimeEntryListViewAdapter.emailintArrayList) {

                curCSV = db.rawQuery("SELECT * FROM RecordsTable WHERE RecordId ='" + ids + "'", null);

                 if (curCSV.moveToFirst()) {
                     do {
                         //Which column you want to exprort

                         String[] arrStr = {curCSV.getString(0), curCSV.getString(1), curCSV.getString(2), curCSV.getString(3),
                                 curCSV.getString(4), curCSV.getString(5), curCSV.getString(6)};
                         csvWrite.writeNext(arrStr);

                     } while (curCSV.moveToNext());


                 }
                 curCSV.close();
             }

             csvWrite.close();
         } catch (Exception sqlEx) {
             Log.e("MainActivity", sqlEx.getMessage(), sqlEx);
         }

选择单个id数据不是问题,但我希望使用id获取多个数据,这就是为什么我在这里使用循环,正如您在上面看到的查询。该方法将根据id 1打印数据,然后根据来自循环的id打印数据?如果我错了,请纠正我,谢谢:)通过使用
curCSV=
为该对象赋值或重新赋值。因此,第二次使用它时,您将覆盖以前的数据否使用此代码时,它不会将任何数据写入文件:(否,当我使用intent获取电子邮件文件时,不会出现任何错误文件中没有数据