我正在使用Android开发问答游戏,并尝试使用SQLite保存用户的比赛。
我有两个表:
MATCH
-id
-description
QUESTION
-id
-id_match
-question
我在Java中有Match
和Question
个对象。 Match
对象有一个ArrayList<Question>
。
保存数据没问题。
我需要从数据库中获取所有具有所有相关问题的匹配项。
这是我的查询
SELECT * FROM matches LEFT JOIN questions ON matches.id = questions.id_match
这就是我执行查询的方式:
Cursor cursor = db.rawQuery(query, null);
如何迭代光标以获取ArrayList<Match>
?
答案 0 :(得分:0)
此查询:
SELECT * FROM matches LEFT JOIN questions ON matches.id = questions.id_match
将获取5列,其中2列具有相同的名称:id
。
我相信最好像这样更改查询:
SELECT m.id mid, m.description, q.id qid, q.id_match, q.question
FROM matches m LEFT JOIN questions q ON m.id = q.id_match
因此列的名称都不同。
现在执行后:
Cursor cursor = db.rawQuery(query, null);
您有一个Cursor
对象,其中包含上述查询获取的所有行。
您需要一个循环来访问每一行每一列的值:
while (cursor.moveToNext()) {
String mid = cursor.getString(cursor.getColumnIndex("mid"));
String description = cursor.getString(cursor.getColumnIndex("description"));
String qid = cursor.getString(cursor.getColumnIndex("qid"));
String id_match = cursor.getString(cursor.getColumnIndex("id_match"));
String question = cursor.getString(cursor.getColumnIndex("question"));
// here write your code
}
如果mid
,qid
和id_match
不是字符串而是整数,则用getInt()
代替getString()
。
答案 1 :(得分:0)
SELECT M.id as match_id, M.description, Q.id as ques_id, Q.id_match, Q.question FROM matches M LEFT JOIN questions Q ON matches.id = questions.id_match
您可以像这样迭代游标:
while (cursor.moveToNext()) {
String match_id = cursor.getString(cursor.getColumnIndex("match_id"));
String description = cursor.getString(cursor.getColumnIndex("description"));
String ques_id= cursor.getString(cursor.getColumnIndex("ques_id"));
String id_match= cursor.getString(cursor.getColumnIndex("id_match"));
}