首页 > 解决方案 > 从行为空的数据库中过滤结果

问题描述

我想显示数据库中指定列的行为空(未插入数据)的所有行。为此,我在我的代码中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列中传递值的结果。

标签: kotlinsqlite

解决方案


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

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

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


推荐阅读