java - SQLiteException:在“Ange”附近:语法错误(代码 1):
问题描述
我在 DatabaseHelper 类中编写了一个方法,如下所示,它适用于短列表,但不适用于长列表,我收到错误Caused by: android.database.sqlite.SQLiteException: near "Ange": syntax error (code 1): , while compiling: SELECT genre FROM second WHERE name='L'Ange-Gardien and Notre-Dame de la Salette Police, Fire and EMS'
我删除了 L'Ange-Gardien 和 Notre-Dame de la Salette Police、Fire 和 EMS 项目但它仍然给出错误。
public String getScannerTypeByRadioName(String radioName) {
String scannerType = null;
myDataBase = this.getWritableDatabase();
String query = "SELECT genre FROM second WHERE name='" + radioName + "'";
Cursor c = myDataBase.rawQuery(query, null);
while (c.moveToNext()) {
scannerType = c.getString(c.getColumnIndex("genre"));
}
return scannerType;
}
解决方案
永远不要使用要在 sql 语句中传递的参数的串联。
在这一行:
String query = "SELECT genre FROM second WHERE name='" + radioName + "'";
您将字符串radioName
与值连接:
L'Ange-Gardien and Notre-Dame de la Salette Police, Fire and EMS
其中包含一个单引号,这会创建一个无效的 sql 语句。
使用?
占位符的推荐方式:
String query = "SELECT genre FROM second WHERE name=?";
Cursor c = myDataBase.rawQuery(query, new String[] {radioName});
推荐阅读
- python - 如何使python命令运行2.7版本和python3运行3.8.5版本
- c++ - 您不能像从特定命名空间调用函数一样从特定命名空间调用预处理器宏吗?
- reactjs - 在 React 中将 props 绑定到父状态
- java - 无需身份验证即可访问 Swagger UI Spring Boot
- javascript - 如何将数据从 angular 传递到我的云函数并得到响应?
- python - Python:尝试使用我打开的文件的内容时出现 TypeError
- c# - 如何解决 Unity Remote 5 无法正常工作的问题
- flutter - 更改应用程序语言颤动后如何更改页面内容的方向
- ios - 从一个 ViewController 导航到具有不同 Storyboard 的新 ViewController
- r - 获取逗号前后字符串中数字的平均值