从 sql 填充微调器并使结果独一无二

Posted

技术标签:

【中文标题】从 sql 填充微调器并使结果独一无二【英文标题】:Populate spinner from sql and make results unique 【发布时间】:2012-01-13 14:26:03 【问题描述】:

你好(对不起)

我厌倦了从 sqlitele 填充微调器,它工作正常,但我的表看起来像:

_id |姓名 |时间 | ....

_id: 是自增号总是唯一的 姓名:是人名,在此表中的多行重复

我想将这一行中的所有名称都放入微调器,但 uniq 没有重复项。 我现在怎么样了:

私人无效 updateSpiner() Spinner nameSpinner = (Spinner) findViewById(R.id.spinMena);

    Cursor nameCursor = db.getNames();
    startManagingCursor(nameCursor);

    String[] from = new String[]"Name"; 
    int[] to = new int[]android.R.id.text1;

    SimpleCursorAdapter nameAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_spinner_item, nameCursor, from, to);
            nameSpinner.setAdapter(nameAdapter);
        

这是我获取数据的方式:

public Cursor getNames()
        final String KEY_TITLE = "Name";
        final String KEY_ROWID = "_id";
        return database.query("plan", new String[] KEY_ROWID, KEY_TITLE, null, null, null, null, null);
    

有人可以向我解释为什么我还需要为此获取 _id 行,我现在还在使用 Java,我不明白为什么需要它,除非我不这样做,它会抱怨那里没有_id。

但它没有在第一种方法中使用,我只从中获取名称...因为 _id 我不能在查询 DISTINCT = true 中使用,因为它仍然返回所有行,因为 _id 对于每一行都是唯一的..

有人可以帮我把头绕过去吗?我不想做单独的表什么的..

谢谢, 弗拉德

【问题讨论】:

您的表需要不同的名称? 【参考方案1】:

在我的情况下,我无法使用 SimpleCursorAdapter 完成这项工作,我必须做的是,使用 ArrayAdapter 而不是 simplecursoradapter,并在从查询中删除 ID 字段后在查询中添加 DISTINCT 子句。这是Why _id field required for simplecursor adapter讨论的链接

【讨论】:

所以我应该做这样的事情吗?当需要将数据附加到适配器时,我喜欢使用表名别名来查询 id 字段为 _id。示例:SELECT id _id, msg from message order by id。这样适配器就会看到一个名为 _id 的字段,并且每个人都很高兴。 当你使用 ArrayAdapter 而不是 SimpleCursorAdapter 时,你不需要 _id。您只需将游标数据构造为数组并将该数组传递给适配器(创建数组有开销,但我们实现了我们想要的)。 我明白了,所以我唯一需要改变的是 SimpleCursorAdapter 到类似的东西: ArrayAdapter new ArrayAdapter(this,android.R.layout.simple_list_item_1, from );并去掉 sql 请求中的 _id ? 光标名称Cursor = db.getNames();开始管理游标(名称游标); //这里迭代光标并获取您的数据并填充字符串数组。 String[] from = new String[]"名称"; int[] to = new int[]android.R.id.text1; ArrayAdapter nameAdapter = new ArrayAdapter (this, android.R.layout.simple_spinner_item, passThestringarrayconstructedAbove); nameSpinner.setAdapter(nameAdapter); 【参考方案2】:

在我看来,您的表格理想地不适合 Spinner 输入。您需要规范化您的数据库并创建一个类似于nameId | name 的新表。然后在“数据”表中,您将拥有dataId | nameId | time | ...。然后,您只需使用新 nameId | name 表中的数据加载 Spinner。

【讨论】:

嗯,是的,我担心我必须创建另一个表。好吧,我一回到家就可以试试。【参考方案3】:

也许您可以在 sqlite 查询中使用 DISTINCT:SELECT manual

【讨论】:

以上是关于从 sql 填充微调器并使结果独一无二的主要内容,如果未能解决你的问题,请参考以下文章

r shiny sqlquery - 从 sql 查询结果中填充复选框

xml 使用微调器并进行数学运算

Angular-RxJS- 在长 API 调用中间隐藏微调器并继续 API 调用

IBM 表单设计器并使 jQuery 与 Dojo 一起工作

多个微调器计算结果不准确

在 sql 结果中填充空日期的最直接方法是啥(在 mysql 或 perl 端)?