Фильтровать базу данных и показывать результаты при выполнении 2 условий - PullRequest
0 голосов
/ 27 октября 2018

Я пытаюсь отфильтровать свою базу данных sqlite, чтобы показать только результаты, если выполняется более одного условия.

override fun onCreateLoader(p0: Int, p1: Bundle?): Loader<Cursor> {
    val projection = arrayOf(
            WalletEntry._ID,
            WalletEntry.KEY_TITLE,
            WalletEntry.KEY_LAST_DATE,
            WalletEntry.KEY_TRANSACTION_PLACE,
            WalletEntry.KEY_LAST_EXPENSE_VALUE,
            WalletEntry.KEY_LAST_TRANSACTION_TITLE,
            WalletEntry.KEY_VALUE_AFTER,
            WalletEntry.KEY_LOCALES,
            WalletEntry.KEY_CURRENCY
    )

    val data = "string" // specified result

    val selection = "${WalletEntry.KEY_TITLE} = ?" // AND WalletEntry.KEY_TRANSACTION_PLACE IS NOT NULL
    val selectionArgs = arrayOf(data)

    return applicationContext?.let { context ->
        CursorLoader(context,
                WalletEntry.CONTENT_URI,
                projection,
                selection,
                selectionArgs,
                null)
    }!!
}

Что я имею в виду, в предоставленном коде, где я инициализирую выделение, я хочу выбрать строки, где заголовок равен переменной data, а столбец KEY_TRANSACTION_PLACE не равен нулю.

Итак, как мне исправить мои selection / selectionArgs, чтобы отфильтровать эти результаты?

Ответы [ 2 ]

0 голосов
/ 27 октября 2018

Как ответили в этом ответе, API базы данных не позволяет передавать значения NULL в качестве параметров.Разрешены только строки.Поэтому я предпочитаю использовать простой SQL-запрос здесь.Или вы можете использовать новую Room постоянную библиотеку, если ваше приложение использует действительно сложную базу данных.

0 голосов
/ 27 октября 2018

У вас почти было это:

val selection = "${WalletEntry.KEY_TITLE} = ? AND ${WalletEntry.KEY_TRANSACTION_PLACE} IS NOT NULL"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...