CSV文件写入问题android sqlite数据库
我正在开发一个应用程序,我需要使用不同的id从sqlite数据库检索数据,我做了很多工作,但我的问题是,当我制作CSV文件时,我也会得到每个id的列名 就像我得到了这种类型的CSV文件 我正在使用这个代码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
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获取电子邮件文件时,不会出现任何错误文件中没有数据