Как правильно сделать запрос для SQLIte через библиотеку в котлине?
У меня в бд имеются две сущности: Дни (айди(первичный ключ), день) и Упражнения (айди(внешний ключ), упражнение, айди_дня (внешний ключ)). В ресайклвью я закидываю карточки, которые заполняются инфой из бд и по которым я мог бы переходить.
Идея такова: пользователь вводит дату (инфа кидается в первую сущность, бд заполняется), создается карточка, юзер по ней переходит и таким же образом вводит название упражнения (инфа кидается во вторую сущность, через интент я передаю дату во внешний ключ, таблица заполняется тоже). Но в разные дни пользователь должен видеть упражнения, которые делались ИМЕННО В ЭТИ ДНИ (т.е. юзер не должен в первом дне видеть упражнения, которые он делал в другие). Для этого нужно (видимо) заполнять ресайклвью с помощью верного SQL-запроса и с этим есть проблема.
Создал аналог бд из котлина в DbBrowser:
SELECT Exercise_name, Exercise_day_id FROM Exercises
JOIN Days
ON Exercises.Exercise_day_id = Days.id
WHERE Exercises.Exercise_day_id = 2
Работает прекрасно и выводит то, что нужно. Но как это реализовать на котлине? Попытался в лоб переписать код из DbBrowser, но выдает ошибку "Нет такого атрибута как "day", доступные атрибуты "Exersice_name" и "Exercise_day_id", хотя Day у меня имеется. То бишь проблема в самом запросе, я явно тут накосячил, подскажите, пожалуйста, где:( Ну или если есть другой способ использовать запрос из DbBrowser и выводить в ресайклвью то, что мне нужно, был бы рад его увидеть или почитать о нем. Документацию осилить не в СиЛаХ...
fun readseveraldbdexercisedata(): ArrayList<ListItem>{
val dataList = ArrayList<ListItem>()
val selectQuery = "SELECT ${MyDbNameClass.EXERCISE_COLUMN_NAME_EXERCISE}, ${MyDbNameClass.EXERCISE_DAY_ID} FROM " +
"${MyDbNameClass.EXERCISE_TABLE_NAME} " +
"JOIN ${MyDbNameClass.DAYS_TABLE_NAME} ON ${MyDbNameClass.EXERCISE_DAY_ID} = ${MyDbNameClass.DAYS_TABLE_NAME}.${BaseColumns._ID} " +
"WHERE ${MyDbNameClass.EXERCISE_DAY_ID} = 1"
val cursor = db?.rawQuery(selectQuery, null)
while (cursor?.moveToNext()!!){
val exerciseText = cursor.getString(cursor.getColumnIndexOrThrow(MyDbNameClass.DAYS_COLUMN_DAY))
var item = ListItem()
item.exercise_name = exerciseText
dataList.add(item)
}
cursor.close()
return dataList
}
Если поможет, то вот код, в котором я объявляю БД:
//сущность ДНИ
const val DAYS_TABLE_NAME = "Days"
const val DAYS_COLUMN_DAY = "day"
const val CREATE_TABLE_DAYS = "CREATE TABLE IF NOT EXISTS $DAYS_TABLE_NAME(" +
"${BaseColumns._ID} INTEGER PRIMARY KEY, " +
"$DAYS_COLUMN_DAY TEXT NOT NULL)"
const val SQL_DELETE_DAYS_TABLE = "DROP TABLE IF EXISTS $DAYS_TABLE_NAME"
//сущность УПРАЖНЕНИЯ
const val EXERCISE_TABLE_NAME = "Exercises"
const val EXERCISE_COLUMN_NAME_EXERCISE = "Exercise_name"
const val EXERCISE_DAY_ID = "Exercise_day_id"
const val CREATE_TABLE_EXERCISES = "CREATE TABLE IF NOT EXISTS $EXERCISE_TABLE_NAME(" +
"${BaseColumns._ID} INTEGER PRIMARY KEY, $EXERCISE_COLUMN_NAME_EXERCISE TEXT NOT NULL DEFAULT 'Название упражнения'," +
"Exercise_day_id TEXT NOT NULL DEFAULT 'Дата'," +
"FOREIGN KEY('$EXERCISE_DAY_ID') REFERENCES 'Days')"
const val SQL_DELETE_EXERCISES_TABLE = "DROP TABLE IF EXISTS $EXERCISE_TABLE_NAME"