SQL запрос с ГДЕ - PullRequest
       2

SQL запрос с ГДЕ

0 голосов
/ 17 января 2011

Я пытаюсь реализовать запрос detabase, используя WHERE, и действительно просто задаюсь вопросом, как его реализовать? код, который я здесь, дает мне ошибку; / thnánk you!

        public Cursor fetchAllCatagoryForSign(String sign) {
        String signSelect="";
        if(sign!=null){
            signSelect=" WHERE " + CATAGORY_SIGN + "=" + sign;
        }
        return mDb.rawQuery("SELECT " + CATAGORY_ID + "," +
                " " + CATAGORY_NAME +  "," +
                " " + CATAGORY_SIGN + " FROM "
                + CATAGORY_TABLE + signSelect + 
                " ORDER BY " + CATAGORY_NAME + " DESC", null);
    }

Ответы [ 2 ]

0 голосов
/ 17 января 2011

Пожалуйста, укажите вашу ошибку. Вы можете попробовать переключиться на:

String.format(" WHERE %s = '%s'", CATEGORY_SIGN, sign);

String.format("SELECT %s, %s, %s, %s FROM %s %s ORDER BY %s DESC, null, CATEGORY_ID, CATEGORY_NAME, CATEGORY_SIGN, CATEGORY_TABLE, signSelect, CATEGORY_NAME);

Я думаю, что это немного чище, хотя вы могли бы лучше отформатировать его в своей IDE.

0 голосов
/ 17 января 2011

Если знак представляет собой строку, относящуюся к столбцу TEXTual (например, varchar), вам понадобятся кавычки вокруг него в большинстве СУБД.

public Cursor fetchAllCatagoryForSign(String sign) {
    String signSelect="";
    if(sign!=null){
        signSelect=" WHERE " + CATAGORY_SIGN + "='" + sign.Replace("'","''") + "'";
    }
    return mDb.rawQuery("SELECT " + CATAGORY_ID + "," +
            " " + CATAGORY_NAME +  "," +
            " " + CATAGORY_SIGN + " FROM "
            + CATAGORY_TABLE + signSelect + 
            " ORDER BY " + CATAGORY_NAME + " DESC", null);
}

@ обновлено после примечания GolezTrol

Если категориязнак приходит от пользователя из всего мира, эти фрагменты кода будут открыты для внедрения SQL-кода, и в этом случае вы захотите защитить переменную «знак» с помощью .Replace, как показано в коде.

...