从行为空的数据库中过滤结果

时间:2018-10-25 13:39:13

标签: kotlin sqlite

我想显示数据库中的所有行,其中指定列的行为空(未插入数据)。为此,我在onCreateLoader中编写了以下代码:

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

        val selection = "${WalletEntry.KEY_CURRENCY} = ?"
        val selectionArgs = arrayOf("")


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

我要显示WalletEntry.KEY_CURRENCY没有符号值的所有结果为空的地方。我尝试将selectionArgs指定为null,但均无效。因此,我应该如何编写selectionArgs来显示给定行为空的所有结果?

为使情况更清楚,我将提供一个应用程序目标。我正在学习Kotlin,因此决定编写类似“银行”应用程序的东西,在其中可以添加不同的钱包并指定货币。如果您添加新货币,则会立即将其添加到数据库的WalletEntry.KEY_CURRENCY列中。然后,我有一个包含所有“钱包”的列表,在其中添加新货币后,会出现一个空的额外钱包。为避免这种情况,我想过滤结果并仅显示在WalletEntry.CURRENCY列中未传递值的结果。

1 个答案:

答案 0 :(得分:1)

如果您要在该数据库列中寻找NULL值,我想您可能正在寻找:

val selection = "${WalletEntry.KEY_CURRENCY} IS NULL"
val selectionArgs = null

如果selectionArgs参数不能为空,请尝试将其设置为emptyArray<String>()