Запрос возвращает только комбинацию цифр или цифр + букв из таблицы. Как изменить его, чтобы показывать записи с буквами? - PullRequest
2 голосов
/ 16 июня 2019

Я хочу получать записи только из столбца KEY_EXAMPLE.Когда в столбце KEY_EXAMPLE есть записи типа «1234» или «1234a», код показывает записи такого типа, но когда в нем есть запись типа «abcd», он не отображается.

Я пытался выяснить, почему это не такхочу показать записи букв, я думаю, что проблема в «выделении», но я не знаю, как это написать.

 public static final String _id = BaseColumns._ID;
 public static final String KEY_EXAMPLE = "Example";

 private static final String SCRIPT_CREATE_DATABASE =
        "create table " + MYDATABASE_TABLE + " ("
                + _id + " integer primary key autoincrement, "
                + KEY_X + " text, "
                + KEY_Y + " text,"
                + KEY_EXAMPLE + " text);";


 public Cursor showRecordsFromExample(){
    String[] selectedColumn = new String[]{_id, KEY_EXAMPLE};
    Cursor selectedCursor = sqLiteDatabase.query(MYDATABASE_TABLE, selectedColumn,
            "Example", null, null,
            null, null);
    return selectedCursor;
}

Почему отображаются только цифры или цифры + записи букв?Как сделать так, чтобы показывать буквы тоже?

1 Ответ

2 голосов
/ 16 июня 2019

Почему отображаются только цифры или цифры + только буквы?

Причина в том, что предложение WHERE (третий параметр метода запроса), скорее всего, не является ожидаемым выражением.

То есть, по сути, вы используете: -

SELECT _id,Example FROM mytable WHERE Example; 

Таким образом, столбец Пример считается результатом сравнения, либо ложным, либо истинным (0 или 1).

Как abcd в нецифровом, оно равно 0 ложно.

Когда число встречается первым, например 123 или 123ABC тогда SQlite учитывает числовое значение, и если оно не равно 0, тогда оно истинно.

  • 0ABC будет ложным.
  • -9ABC будет иметь значение true.
  • ABC999 будет ложным (сначала не числовые значения)

Ложные строки (0) игнорируются, включаются истинные строки (не 0) и, следовательно, результат.

Как сделать так, чтобы показывать записи букв тоже?

ЕслиВы использовали: -

public Cursor showRecordsFromExample(){
    String[] selectedColumn = new String[]{_id, KEY_EXAMPLE};
    Cursor selectedCursor = sqLiteDatabase.query(MYDATABASE_TABLE, selectedColumn,
            null, null, null,
            null, null);
    return selectedCursor;
}

Тогда вы получите значения для всех строк.

Если бы вы использовали: -

public Cursor showRecordsFromExample(){
    String[] selectedColumn = new String[]{_id, KEY_EXAMPLE};
    Cursor selectedCursor = sqLiteDatabase.query(MYDATABASE_TABLE, selectedColumn,
            KEY_EXAMPLE + " LIKE '%a%'", null, null,
            null, null);
}

Тогда это вернет все строкикоторые имеют a или A в любом месте столбца Пример.

...