从 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在我看来,您的表格理想地不适合 Spinner 输入。您需要规范化您的数据库并创建一个类似于nameId | name
的新表。然后在“数据”表中,您将拥有dataId | nameId | time | ...
。然后,您只需使用新 nameId | name
表中的数据加载 Spinner。
【讨论】:
嗯,是的,我担心我必须创建另一个表。好吧,我一回到家就可以试试。【参考方案3】:也许您可以在 sqlite 查询中使用 DISTINCT:SELECT manual
【讨论】:
以上是关于从 sql 填充微调器并使结果独一无二的主要内容,如果未能解决你的问题,请参考以下文章
r shiny sqlquery - 从 sql 查询结果中填充复选框
Angular-RxJS- 在长 API 调用中间隐藏微调器并继续 API 调用