当前位置: 首页 > 知识库问答 >
问题:

显示不同的记录sqlite android

黄锋
2023-03-14

即使我将distinct设置为true,我的游标也返回了两次记录:

return myDataBase。查询(true,DB_TABLE,new String[]{“rowid as _id”,KEY_CONDITIONS},builder.toString(),symptoms,null,null;

仅供参考,

   public Cursor getData(String[] symptoms) {
    String where = KEY_SYMPTOMS + "= ?";
    String orStr = " OR "; 

    StringBuilder builder = new StringBuilder(where);
    for(int i = 1; i < symptoms.length; i++)
        builder.append(orStr).append(where);

    return myDataBase.query(true, DB_TABLE, new String[] 
            {"rowid as _id", KEY_CONDITIONS}, builder.toString(), symptoms, null, null, null, null);

}

或者我试着换成rawQuery

    return myDataBase.rawQuery("SELECT DISTINCT " + KEY_CONDITIONS + " FROM " 
    + DB_TABLE + " " + builder.toString() + symptoms.toString(), null);

我的日志说:

  03-02 22:57:02.634: E/AndroidRuntime(333): FATAL EXCEPTION: main
  03-02 22:57:02.634: E/AndroidRuntime(333): android.database.sqlite.SQLiteException: near "=": syntax error: , while compiling: SELECT DISTINCT conditions FROM tblSymptoms symptoms= ? OR symptoms= ?[Ljava.lang.String;@405550f8

请帮我确定这里似乎缺少什么。任何帮助都是真的非常感谢。

共有2个答案

公孙成仁
2023-03-14

你有两个常规选项二做这个任务使用行查询**和**使用 DISTINCT 关键字

对于使用行查询,您可以直接使用mr的函数。山姆和使用 DISTINCT 关键字,你可以使用

public Cursor query (boolean distinct, String table, String[] columns, 
                 String selection, String[] selectionArgs, String groupBy,
                 String having, String orderBy, String limit)

因为查询斯图彻正在重新调整这个:

query(false, table, columns, selection, selectionArgs, groupBy,
            having, orderBy, null /* limit */);

在此代码中,第一个参数用于< code>DISTINCT,因此将其作为< code>true提供。因此,您的< code >查询会像这样

Cursor cursor = db.query(true, YOUR_TABLE_NAME, new String[] { COLUMN1 ,COLUMN2, COLUMN_NAME_3 }, null, null, COLUMN2, null, null, null);

基本上,DISTINCT关键字只返回一次列名,如果它出现超过一次。

熊锐进
2023-03-14

解决方案
您需要DISTINCT条件,但Android需要_id列,这是一个问题,因为您无法混合和匹配: <罢工> SELECT_id,DISTINCT条件… 。但是,您可以改用GROUP BY子句:

return myDataBase.query(DB_TABLE, new String[] {"rowid as _id", KEY_CONDITIONS}, 
        builder.toString(), symptoms, KEY_CONDITIONS, null, null);

解释
此查询:

return myDataBase.rawQuery("SELECT DISTINCT " + KEY_CONDITIONS + " FROM " 
    + DB_TABLE + " " + builder.toString() + symptoms.toString(), null);

失败,因为您在错误的参数中传递了< code>String[] symptoms,请尝试:

return myDataBase.rawQuery("SELECT DISTINCT " + KEY_CONDITIONS + " FROM " 
    + DB_TABLE + " " + builder.toString(), symptoms);

此查询:

return myDataBase.query(true, DB_TABLE, new String[] {"rowid as _id", KEY_CONDITIONS}, builder.toString(), symptoms, null, null, null, null);

失败,因为DISTINCT正在查看id列和条件列。它相当于:SELECT DISTINCT(_id,conditions)…显然,您只需要不同的条件。。。

 类似资料:
  • 我怀疑这可能是我包含的一个库,它正在扰乱我的日志。这有可能吗?librray可以改变我的日志显示方式吗?既然我有点迷路了,我该怎么调查呢?

  • 我有3节课。MainActivity,OneFragment,TwoFragment,我在OneFragment上使用Sqlite填充了listview,并且我从TwoFragment中添加了记录(使用我的SqlHelper类使用的CreateData函数),但是新记录没有显示在listview中。 我该怎么解决这个? 如果你想看我可以上传的代码。

  • 问题内容: 所以我有这张表 现在,如果我查询 我期待类似的东西 是否有可能 ? PS:C行中的内容仅表示该列为空。 问题答案: 您可以创建一个嵌套表架构对象类型: 然后按以下方式构造查询: 例子: 结果:

  • 显示特定的通话记录     可显示指定的通话记录。选择通话记录后按下按钮,并选择选项选单的[依种类排列记录]。 通话记录可从以下项目中选择。 所有通话记录 显示通话记录。 XX件未处理事项 显示前次确认后发生的记录。 没有其他记录时,会显示[暂无任何未处理事项]。 语音消息 显示语音消息。 未接来电 显示未接来电记录。 已接来电 显示已接来电记录。 已拨电话 显示已拨电话记录。 提示 亦可于显示通

  • 我试图显示一个随机记录从我的表,但没有运气,这是我一直以来。这是用PHP编写的 想知道这是否是一个明显的错误吗?我已经连接到数据库了。 JB的

  • 问题内容: 嗨,我在下面的表格中记录了活动和分数 我需要从活动中返回所有记录 退货 然后我需要基于来自点表的用户ID对用户点求和 退货 一切都很好,但我需要将它们放在一起给用户,即 有指针吗? 问题答案: 使用外部联接: 或子查询: