将SQLite结果放入Java对象

时间:2019-03-11 14:08:39

标签: android sqlite

我正在使用Android开发问答游戏,并尝试使用SQLite保存用户的比赛。

我有两个表:

MATCH
-id
-description

QUESTION
-id
-id_match
-question

我在Java中有MatchQuestion个对象。 Match对象有一个ArrayList<Question>

保存数据没问题。

我需要从数据库中获取所有具有所有相关问题的匹配项。

这是我的查询

SELECT * FROM matches LEFT JOIN questions ON matches.id = questions.id_match

这就是我执行查询的方式:

Cursor cursor = db.rawQuery(query, null);

如何迭代光标以获取ArrayList<Match>

2 个答案:

答案 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
}

如果midqidid_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"));
    }