筛选数据库并显示满足2个条件的结果

时间:2018-10-27 14:31:28

标签: android sqlite kotlin

我正在尝试过滤我的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 :(得分:1)

您几乎拥有它:

val selection = "${WalletEntry.KEY_TITLE} = ? AND ${WalletEntry.KEY_TRANSACTION_PLACE} IS NOT NULL"

答案 1 :(得分:0)

github issue回答中所述,数据库API不允许传递NULL值作为参数。只允许使用字符串。因此,我更喜欢在这里使用简单的SQL查询。或者,如果您的应用程序使用非常复杂的数据库,则可以使用新的this持久性库。