1 回答
TA贡献1825条经验 获得超6个赞
正确解释异常(即错误)详细信息至关重要。如果你做不到这一点,那么你就无法正确调试你的代码。异常详细信息的转储可能会变得混乱,但这里是关键点。请注意,异常类型和总体问题由以下描述:
android.database.sqlite.SQLiteException:没有这样的列:Joker(代码1)
SQLite 期望找到一个名为 Joker 的列。但为什么?为了回答这个问题,异常详细信息中还有另一条线索:
从 movie_favorites 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 注入和其他错误...例如移动标题包含引号。如何做到这一点无法在这里回答,因为完整的教程超出了这个问题的范围,但可以通过在其他地方搜索“how to use sqlparameters in java”来发现它。
一旦修复了这个错误,按钮代码就可以正常工作。但如果没有,那么您需要单独研究该错误,并可能提出一个新问题。
添加回答
举报