Очень важно правильно интерпретировать детали исключения (то есть ошибки). Если вы не можете сделать это, то вы не можете правильно отладить свой код. Сбросы деталей исключений могут стать грязными, но вот ключевые моменты. Обратите внимание, что тип исключения и общая проблема описаны в
android.database.sqlite.SQLiteException: такого столбца нет: Joker (код 1)
SQLite isожидая найти колонку под названием Джокер. Но почему? Чтобы ответить на это, есть другая подсказка в деталях исключения:
SELECT * FROM movie_foving WHERE _id = Joker
Остальные детали исключения относятся только к кодутрассировка и не помогают, так как вы уже знаете код, в котором возникла проблема. Итак, давайте посмотрим на детали SQL, который вызвал проблему:
... WHERE _id=Joker
SQLite будет интерпретировать Joker
как столбец, потому что он не заключен в кавычки как строку. Но так как это не столбец в таблице, SQLite понятия не имеет, что такое Joker
. Он не знает, что вы хотите соответствовать названию фильма. Действительно, строка должна быть заключена в кавычки, что-то вроде 'Joker'
, чтобы SQLite знал, что это строка.
Если мы проанализируем ее еще дальше, мы увидим, что она пытается сравнить столбец с именем _id
к названию фильма. Но в большинстве случаев (на самом деле все время, кроме странных случаев), имя типа _id
является целочисленным первичным ключом. Я предполагаю, что этот запрос сравнивает неправильный столбец полностью. Вот лишь предположение о том, как должен выглядеть правильный SQL ... только предположение:
SELECT * FROM movie_favorites WHERE movie_title = 'Joker'
Чтобы получить такой результат, вам нужно либо исправить существующий код, включить соответствующий столбец и обернутьmovie.getTitle()
в кавычках ...
ИЛИ
Еще лучше было бы использовать правильные параметры запроса SQL (подготовленные операторы), чтобы избежать внедрения SQL и других ошибок .. например, если заголовок перемещения содержит кавычки. О том, как это сделать, здесь не может быть ответа, поскольку полное руководство выходит за рамки этого вопроса, но его можно узнать, выполнив поиск в других местах «Как использовать параметры SQL в Java» .
Как только эта ошибка исправлена, код кнопки может работать нормально. Но если это не так, то вы исследуете эту ошибку отдельно и, возможно, задаете новый вопрос.