Как использовать Android SQLITE SELECT с двумя параметрами?

avatar
CY B ER
1 июля 2021 в 18:33
45
3
1

Этот код возвращает пустой курсор. Что здесь не так? Данные уже есть в sqlitedb.

public static final String COL_2 =  "ID";
    public static final String COL_3 = "TYPE";

public Cursor checkData(String id, String type){
    SQLiteDatabase db = getWritableDatabase();
    Cursor res = db.rawQuery("SELECT * FROM "+ TABLE_NAME  + " WHERE " + COL_2 + " = " + id+ " AND " + COL_3 + " = " + type , null);
    return res;
}
Источник

Ответы (3)

avatar
forpas
1 июля 2021 в 18:41
0

Когда вы передаете строки в качестве параметров, вы должны заключать их в кавычки внутри инструкции sql.
Но при объединении строковых значений в кавычках в коде sql ваш код становится небезопасным.

Рекомендуемый способ сделать это с заполнителями ?:

public Cursor checkData(String id, String type){
    SQLiteDatabase db = getWritableDatabase();
    String sql = "SELECT * FROM "+ TABLE_NAME  + " WHERE " + COL_2 + " = ? AND " + COL_3 + " = ?";
    Cursor res = db.rawQuery(sql , new String[] {id, type});
    return res;
}

Параметры id и type передаются как массив строк во втором аргументе rawQuery().

avatar
Taron Qalashyan
1 июля 2021 в 18:39
0

если тип COL_3 является строкой, попробуйте следующее:

Cursor res = db.rawQuery("SELECT * FROM "+ TABLE_NAME  + " WHERE " + COL_2 + " = " + id+ " AND " + COL_3 + " = '" + type + "'" , null);
avatar
CY B ER
1 июля 2021 в 18:38
0

Наконец-то я решил ее.

public Cursor checkData(String id, String type){
        SQLiteDatabase db = getWritableDatabase();
        Cursor res = db.rawQuery("SELECT * FROM "+ TABLE_NAME  + " WHERE " + COL_2 + " = '" + id+ "' AND " + COL_3 + " =  '" + type +"'" , null);
        return res;
    }
forpas
1 июля 2021 в 18:39
0

Не делай этого. Он подвержен SQL-инъекциям: en.wikipedia.org/wiki/SQL_injection