#android #sqlite
#Android #sqlite
Вопрос:
Я разрабатываю игру-викторину на Android и пытаюсь сохранить совпадение пользователя с SQLite.
У меня есть две таблицы:
MATCH
-id
-description
QUESTION
-id
-id_match
-question
У меня есть объекты Match
и Question
на Java. Match
Объект имеет ArrayList<Question>
.
Нет проблем с сохранением данных.
Мне нужно получить из базы данных все совпадения со всеми связанными вопросами.
Это мой запрос:
SELECT * FROM matches LEFT JOIN questions ON matches.id = questions.id_match
И вот как я выполняю запрос:
Cursor cursor = db.rawQuery(query, null);
Как я могу выполнить итерацию курсора, чтобы получить ArrayList<Match>
?
Ответ №1:
Этот запрос:
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. Моя проблема именно в том, где вы написали // здесь напишите свой код. Как я могу узнать, является ли текущий курсор новым совпадением или просто еще одним вопросом для добавления к совпадению?
2. Я предлагаю вам отредактировать свой вопрос, чтобы вы четко объяснили свою проблему. Поскольку ваш вопрос сейчас, это не подразумевает ничего из того, что вы сказали в своем комментарии. Также опубликуйте весь соответствующий код, который у вас есть.
3. Каждая итерация курсора НЕ является объектом полного соответствия, но может быть одним из вопросов.
4. Каждая строка курсора содержит как объединенную строку из совпадений, так и вопросов.
Ответ №2:
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"));
}