导出SQLite数据到CSV

我的任务是导出数据到CSV文件。 我想在将数据导出到CSV文件之前生成一个查询。 每个学生都有一个唯一的ID。 到目前为止,我可以单独导出不同表格中的数据,并且运行良好。

这是我目前的模式:

1)学生表

studID | name | teacher | activity SQ202 Mich Lisa Hearing Test FG91A Lim Hanson Behavioural Test 

2)会话表(每个学生可以有多个会话 – 不固定)

  studID | startTime | endTime | sessionNo | status SQ202 10:00 10:40 1 Completed SQ202 13:00 13:50 2 Completed FG91A 14:20 15:00 1 Completed 

3)间隔表(每个会话可以有四个以上的间隔 – 不固定)

 studID |sessionNum |intervalNo | score SQ202 1 1 10/10 SQ202 1 2 7/10 . . . 

这是我如何从一个特定的表中导出数据:

 File exportDir = new File(Environment.getExternalStorageDirectory(), ""); if (!exportDir.exists()) { exportDir.mkdirs(); } file = new File(exportDir, “ChildObservation" + " (D)" + date + " (T)" + time +".csv"); try { file.createNewFile(); CSVWriter csvWrite = new CSVWriter(new FileWriter(file)); // sqlite core query SQLiteDatabase db = myNewGradingDB.getReadableDatabase(); Cursor curChild = db.rawQuery("SELECT * FROM Student ORDER BY name", null); csvWrite.writeNext(“Student ID”, “Name”, “Teacher”, “Activity"); while (curChild.moveToNext()) { String arrStr[] = { curChild.getString(0), curChild.getString(1), curChild.getString(2), curChild.getString(3), }; csvWrite.writeNext(arrStr); } csvWrite.writeNext(); csvWrite.close(); return true; } catch (IOException e) { Log.e(“Child", e.getMessage(), e); return false; } 

但是,我的目标是检索并显示与学生绑定的所有数据。 导出的Excel工作表中的每一行都将包含来自Student表和会话表的所有数据,以及Interval表中相应的间隔编号和分数。 我已经尝试使用内部连接和不同types的查询,但在这些行中仍然有一些重复的值。 每个单元格只能包含一个值,所以在这种情况下,我将无法连接查询中的列。

这是我想要达到的:

 studID | name | teacher | activity | startTime | endTime | sessionNo | status | intervalNo | score | intervalNo | score ... (repeat intervalNo and score) SQ202 Mich Lisa Hearing Test 10:00 10:40 1 Completed 1 10/10 2 7/10 ... FG91A Lim Hanson Behavioural Test 12:30 1:40 2 Completed 1 8/10 2 6/10 ... 

在这个阶段,我不可能改变数据库的devise。 也许还有其他方法可以解决这个问题,无论是通过SQL还是其他方式。 任何帮助或build议将不胜感激。 谢谢。

如果你想要一个唯一的SQL解决scheme,那么解决你的问题的诀窍是使用别名几次join间隔表

 select st.studID, st.name, se.startTime, i1.intervalNo as intervalNo1, i1.score as score1, i2.intervalNo as intervalNo2, i2.score as score2, i3.intervalNo as intervalNo3, i3.score as score3, i4.intervalNo as intervalNo4, i4.score as score4 from Student as st left join Session as se on st.studID = se.studID left join Interval as i1 on st.studID = i1.studID and i1.sessionNo=1 left join Interval as i2 on st.studID = i2.studID and i2.sessionNo=2 left join Interval as i3 on st.studID = i3.studID and i3.sessionNo=3 left join Interval as i4 on st.studID = i4.studID and i4.sessionNo=4 

但是这只有在事先知道有多less间隔的情况下才有效