首页 > 解决方案 > 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;
}

标签: javaandroidsqliteandroid-sqlite

解决方案


永远不要使用要在 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});

推荐阅读