(在SQLite中使用WHERE子句)SQLiteException:near" =":语法错误(代码1):

时间:2015-06-22 15:02:46

标签: android sqlite

我有代码SQLite,但这个代码不是我的应用程序中的工作者

错误

SQLiteException: near "=": syntax error (code 1): , while compiling: SELECT * FROM tabellirikWHERE kategori=Pupuh Ginada

和mya代码

 public ArrayList<Lirik> getAllLirik2(){
    ArrayList<Lirik> arrayList = new ArrayList<Lirik>();
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery("SELECT * FROM "+ TABLE_MUPUH + "WHERE " + KATEGORY_LIRIK + "=" + "Pupuh Ginada ", null);
    cursor.moveToFirst();
    while (cursor.isAfterLast()==false){
        Lirik lirik = new Lirik(
                cursor.getInt(cursor.getColumnIndex(KEYL_ID)),
                cursor.getString(cursor.getColumnIndex(KATEGORY_LIRIK)),
                cursor.getString(cursor.getColumnIndex(JUDUL)),
                cursor.getString(cursor.getColumnIndex(KEY_MUPUH))
        );
        arrayList.add(lirik);
        cursor.moveToNext();
    }

    return arrayList;
}

帮助我,谢谢

1 个答案:

答案 0 :(得分:3)

查看你的select子句......格式不正确:

SELECT * FROM tabellirikWHERE kategori=Pupuh Ginada

你需要增加一个额外的空间 BEFORE “WHERE”。 正如其他人所说,你需要确保用单引号包装“Pupuh Ginada”。以下是您需要的样子:

SELECT * FROM tabellirik WHERE kategori='Pupuh Ginada'

请注意这一点,因为这样可以打开你可能的SQL注入作为安全漏洞,如果你最终有一些UI组件(即和EditText)允许用户输入内容。您应该使用提供给您的参数化方法来完成此任务:

String[] selectionArgs = new String[]{"Pupuh Ginada"};
Cursor cursor = db.rawQuery("SELECT * FROM "+ TABLE_MUPUH + " WHERE " + KATEGORY_LIRIK + "=?", selectionArgs);

更好的是使用db.query ....但我觉得它更难以捕捉查询正在做什么。它使用一堆参数来构建整个查询语句。