Запрос Sqlite возвращает 0, даже если значение равно null

Ниже приведен запрос, который я использую для получения значения int, соответствующего определенному полю в моей таблице SQLite db.

"SELECT conn_status FROM profiles WHERE devID = '" + id+"'"

Если для 'conn_status' нет значения, соответствующего предоставленному devID, то существующее значение в таблице будет равно null. Я получаю данные из java, как показано:

c.getInt(c.getColumnIndex("conn_status"))

проблема здесь, с данным запросом, c.getInt возвращает 0, даже если существующее в поле значение равно null. Как я могу изменить этот запрос таким это возвращает другое значение вместо 0, скажем 5, если значение равно null.

любая помощь приветствуется.

7 ответов


можно использовать


в SQLite, вы можете использовать IFNULL


int в Java является примитивным типом данных и не может быть null. Следовательно, если значение, возвращаемое getInt, отсутствует, вы получаете 0. Объект Integer может быть нулевым, поэтому вы можете рассмотреть возможность использования Integer вместо int, если ваша логика требует, чтобы вы проверяли null вместо 0


Как вы хотите любое другое значение, например 5, если столбец имеет нулевое значение, попробуйте следующий код.

Cursor c = db.rawQuery("SELECT conn_status FROM profiles WHERE devID = '" + id+"'");

    if(c.getCount>0){
    int number = c.getInt(c.getColumnIndex(conn_status));
    return number;
    }else{
    return 5;
    }

если курсор.getCount () return something означает работу запроса и базу данных, не имеющую нулевого значения. Если return opposite означает, что запрос не работает, а databse имеет значение null для соответствующего запроса. Так что попробуйте один раз.


в Android используйте Integer object not int primitive, Integer является нулевым, primitive int вызывает исключение. В модели проверьте, является ли значение null или обработайте содержимое.

/**
 * Return real integer of value or null
 * @param column_name Name of column in result
 */
public Integer getInt(String column_name){
    try{
        if(cursor.isNull(cursor.getColumnIndex(column_name)))
            return null;
        return cursor.getInt(cursor.getColumnIndex(column_name));
    }catch(Exception e){
        e.printStackTrace();
        Log.e("sqlite_exception", "column " + column_name + " not exists. " + e.getMessage());
        return null;
    }
}

вы можете определить, является ли столбец нулевым, вызвав getType ().

Integer locationInfoId;

if (cursor.getType(columnIndex) == Cursor.FIELD_TYPE_NULL){
    locationInfoId = null;
} else {
    locationInfoId = cursor.getInt(columnIndex);
}

columnIndex++;

у меня была такая же проблема с якобы NULL стоимость возврата 0 на c.getInt(index) звонок.

получается, что моя база данных текстовое значение null. То есть вместо 0 байтового значения NULL, там были 4-х символов 'n' 'u' 'l' 'l'. Это сбивает с толку, потому что null выглядит правильно. Я не поймал его, пока не проверил БД с помощью браузера БД SQLite.

когда я заменил эти текстовые значения, все работало как и ожидалось.

Я знаю, что это старый вопрос, но, надеюсь, это сэкономит кому-то еще некоторое время на устранение неполадок.