Android 我的应用程序中的数据库查询结果非常奇怪(sqlite数据库-内部详细代码)

Android 我的应用程序中的数据库查询结果非常奇怪(sqlite数据库-内部详细代码),android,database,filtering,android-sqlite,Android,Database,Filtering,Android Sqlite,我的应用程序在使用数据库结果填充listview时遇到了最奇怪的问题。 因此,我有一个alertdialog,在其中我可以选择两个标准发送到我的数据库:一个类别产品(餐厅、商店等)和一个支付选项(卡/现金) 当用户选择某个内容时,它会将字符串变量设置为某个间隔(categoryInterval和paymentInterval),如下所示: 用于类别(在弹出菜单中): 用于支付选项(位于单选按钮中): 然后,当用户做出选择并单击alertdialog的“OK”按钮时,会有一个显示方法调用查询方法f

我的应用程序在使用数据库结果填充listview时遇到了最奇怪的问题。
因此,我有一个alertdialog,在其中我可以选择两个标准发送到我的数据库:一个类别产品(餐厅、商店等)和一个支付选项(卡/现金)

当用户选择某个内容时,它会将字符串变量设置为某个间隔(categoryIntervalpaymentInterval),如下所示:

用于类别(在弹出菜单中):

用于支付选项(位于单选按钮中):

然后,当用户做出选择并单击alertdialog的“OK”按钮时,会有一个显示方法调用查询方法findFilterInTable()(其目的是查找元素,在本例中,元素的类别列中有一个编号为86或87,付款列中有一个编号为“visa”或“master”内部),并在我的listview中显示结果:

public Cursor findFilterInTable(String categoryInterval,
        String paymentInterval) {
    String where = COL_CAT1 + " IN " + categoryInterval + " OR " + COL_CAT2
            + " IN " + categoryInterval + " OR " + COL_CAT3 + " IN "
            + categoryInterval + " AND " + COL_PAYMENT + " IN "
            + paymentInterval;

    Cursor c = myDatabase.query(DATABASE_TABLE, new String[] { KEY_ROWID,
            COL_NAME, COL_STREET, COL_WEBSITE, COL_PAYMENT, COL_TELEPHONE,
            COL_PRICE, COL_REMARKS, COL_DATEFRIENDLY }, where, null, null,
            null, null);
    return c;
}
但它只起到部分作用:它对类别部分(categoryInterval中的COL_CAT1或……中的COL_CAT2)非常有效,但对于支付部分,我有一个奇怪的结果。当我点击这个按钮(刷卡支付)时,它会从列表中检索一些结果,与我不点击时相比,但它检索的内容与研究完全无关。无论我在paymentInterval(“visa”或“master”以及“okokininjfnsoe”)中写了什么,它似乎只是检索类别部分中具有特定数字组合的一些元素。例如,在本例中,CAT_3=87的元素没有意义。
因此,在我的findFilterInTable()方法中,我的paymentInterval的值会影响结果,但甚至不会在相应的列(COL_PAYMENT)中查找,而是在COL_CAT1、COL_CAT2、COL_CAT3中查找,出于某种原因,会删除一些结果

我真的很难过,不知道如何找到解决办法。事实上,我不知道如何解决一个我不理解、对我来说毫无意义的问题!感谢阅读。

改变

String where = COL_CAT1 + " IN " + categoryInterval + " OR " + COL_CAT2
        + " IN " + categoryInterval + " OR " + COL_CAT3 + " IN "
        + categoryInterval + " AND " + COL_PAYMENT + " IN "
        + paymentInterval;  


为什么有paymentInterval=“(“+”)”;这只是因为对于“无信用卡”按钮,它对应于现金,所以基本上是数据库中的每个元素,所以我让一个空字符串从数据库中检索每个元素。太好了,就是这样!非常感谢!我还有一个关于间隔为空的按钮的问题。这恰好是错误的,因为当我单击它时,并不是所有结果都显示出来,所以我猜它是筛选元素,其中列在数据库中实际上是空的(但有时它不是真的空的,可以写N/A或现金或卡或其他)。你知道在这个时间间隔内写什么才能让查询找到这个列的每个元素吗?你应该有另一个函数public Cursor findFilterInTable(String categoryInterval),如果paymentInterval为空,那么在活动检查中调用这个函数。这样,你就不必像我在上面评论的那样,第一个打动我的那句话。哇,没有办法吗?我想从我的alertdialog OK按钮中调用一个功能,因为有很多可能的组合:有时是一个类别但没有付款,有时是付款和价格但没有类别,有时只是价格和类别。。。我希望我能使用一种大的方法,它不会总是使用每一个输入,只使用那些实际设置为一个值的输入。到目前为止,你有categoryInterval和paymentInterval,我猜priceInterval,你还能有多少?可能最多有六个,但需求会不断变化。我正在用新代码运行一些测试,paymentInterval有一些不同之处:例如,当我在我的interval中输入一个名称(“cash”)时,它将工作并查找写有cash的元素。如果我写“cash”+“N/A”,它将什么也找不到,好像它在寻找“cash”和“N/A”,而不是“cash”或“N/A”。在我的“paymentInterval for the button”(没有信用卡,所以所有内容)中,我想写下我在本栏中能找到的所有内容(“现金”、“签证”、“N/A”等),以显示所有内容,但它只是不显示任何内容。
public Cursor findFilterInTable(String categoryInterval,
        String paymentInterval) {
    String where = COL_CAT1 + " IN " + categoryInterval + " OR " + COL_CAT2
            + " IN " + categoryInterval + " OR " + COL_CAT3 + " IN "
            + categoryInterval + " AND " + COL_PAYMENT + " IN "
            + paymentInterval;

    Cursor c = myDatabase.query(DATABASE_TABLE, new String[] { KEY_ROWID,
            COL_NAME, COL_STREET, COL_WEBSITE, COL_PAYMENT, COL_TELEPHONE,
            COL_PRICE, COL_REMARKS, COL_DATEFRIENDLY }, where, null, null,
            null, null);
    return c;
}
String where = COL_CAT1 + " IN " + categoryInterval + " OR " + COL_CAT2
        + " IN " + categoryInterval + " OR " + COL_CAT3 + " IN "
        + categoryInterval + " AND " + COL_PAYMENT + " IN "
        + paymentInterval;  
String where = "(" + COL_CAT1 + " IN " + categoryInterval + " OR " + COL_CAT2
        + " IN " + categoryInterval + " OR " + COL_CAT3 + " IN "
        + categoryInterval + ") AND " + COL_PAYMENT + " IN "
        + paymentInterval;