【发布时间】:2019-09-07 12:15:24
【问题描述】:
我正在尝试为我的大学制作一个考勤应用程序。我使用 SQLite 进行数据存储(学生名单、考勤数据等) 我希望将考勤数据导出为 CSV 文件。问题是,当我导出文件时,只有 SQLite Db 的最后一个条目被写入 CSV。我附上了下面的代码以便更好地理解。
public void exportExcelSheet() {
DatabaseHandler mDbHandler = new DatabaseHandler(mActivity);
File exportDir = new File(Environment.getExternalStorageDirectory(), "");
if (!exportDir.exists())
{
exportDir.mkdirs();
}
File file = new File(exportDir, "Report.csv");
String[] ColumnNames = {"Roll No.","Name","LA","LT","% age"};
String studentInfoQuery = "SELECT * FROM StudentList";
Cursor studentsListCursor = mDbHandler.execQuery(studentInfoQuery);
studentsListCursor.moveToFirst();
while(!studentsListCursor.isAfterLast()) {
String AttendanceListQuery = "SELECT * FROM AttendanceSheet WHERE StudRoll = '" + studentsListCursor.getPosition() + "';";
String AttendanceQuery = "SELECT * FROM AttendanceSheet WHERE StudRoll = '" + studentsListCursor.getPosition() + "' AND isPresent = 1";
int attendancePercent = 0;
Cursor totalClasses = mDbHandler.execQuery(AttendanceListQuery);
Cursor attendedClasses = mDbHandler.execQuery(AttendanceQuery);
if (totalClasses == null) {
Log.d("profile", "totalClasses null");
}
if (attendedClasses == null) {
Log.d("profile", "attendedClasses null");
}
if (totalClasses != null && attendedClasses != null) {
totalClasses.moveToFirst();
attendedClasses.moveToFirst();
try {
attendancePercent = (int) (((float) attendedClasses.getCount() / totalClasses.getCount()) * 100);
} catch (Exception e) {
attendancePercent = -1;
}
}
assert attendedClasses != null;
assert totalClasses != null;
String showAttendedLectures = String.valueOf(attendedClasses.getCount());
String showTotalLectures = String.valueOf(totalClasses.getCount());
//String showMissedLectures = String.valueOf(totalClasses.getCount() - attendedClasses.getCount());
String AttendancePercentage = String.valueOf(attendancePercent);
try
{
if(!file.exists()){
file.createNewFile();
}
CSVWriter csvWrite = new CSVWriter(new FileWriter(file));
csvWrite.writeNext(ColumnNames);
String[] arrStr ={studentsListCursor.getString(1),studentsListCursor.getString(0), showAttendedLectures, showTotalLectures, AttendancePercentage + " %"};
csvWrite.writeNext(arrStr);
studentsListCursor.moveToNext();
csvWrite.close();
}
catch(Exception sqlException)
{
Toast.makeText(mActivity, "FAILED", Toast.LENGTH_SHORT).show();
Log.e("MainActivity", sqlException.getMessage(), sqlException);
}
Toast.makeText(mActivity, "Saved", Toast.LENGTH_SHORT).show();
}
}
}
【问题讨论】:
标签: java android android-sqlite export-to-csv