Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 坚持使用SQLite和GROUPBY进行android SQL设计_Java_Android_Sql_Sqlite - Fatal编程技术网

Java 坚持使用SQLite和GROUPBY进行android SQL设计

Java 坚持使用SQLite和GROUPBY进行android SQL设计,java,android,sql,sqlite,Java,Android,Sql,Sqlite,存在以下问题: 正在尝试显示表中的与会者列表。表A是通过将来自web源(HTML抓取)的数据“同步”到表A中生成的 表A 列:事件ID、用户ID、用户名 数据: 1111,哈利 222,本 3534,海伦 2534,海伦 2545,詹姆斯 最终结果 我试图在活动中显示此信息,如下所示: 社交1:出席者:哈里 社交2:出席者:本、海伦、詹姆斯 社交3:出席者:海伦 最好的方法是什么 我的初始计划: 1) 在表a的eventID上运行带有Group By的SQL select(查询1)。 2) 循环

存在以下问题: 正在尝试显示表中的与会者列表。表A是通过将来自web源(HTML抓取)的数据“同步”到表A中生成的

表A
列:事件ID、用户ID、用户名
数据:
1111,哈利
222,本
3534,海伦
2534,海伦
2545,詹姆斯

最终结果
我试图在活动中显示此信息,如下所示:
社交1:出席者:哈里
社交2:出席者:本、海伦、詹姆斯
社交3:出席者:海伦

最好的方法是什么

我的初始计划:
1) 在表a的eventID上运行带有Group By的SQL select(查询1)。
2) 循环执行步骤1中的每个结果。
3) 对于查询1的每个结果,选择tableA中具有当前eventID的所有行(称为查询2)
4) 循环执行步骤3查询2中的结果,对于每个结果,将用户名添加到字符串缓冲区中。在查询2结果的末尾,将eventID与生成的StringBuffer一起插入一个新表:

表B:
列:eventID,用户名
数据:
1,“哈利”
2,“本,海伦,詹姆斯”
3,“海伦”

然后使用表B中的数据以及SimpleCorsorAdapter,用数据填充标准ListActivity,生成所有事件的列表和以逗号分隔的与会者列表。然后每次重新生成表A时,清除表B中的数据并重新填充。

问题:
这是最好的方法/最简单的方法吗?我真的不喜欢有一张临时桌子来做这件事。

背景:我是Android开发者的新手,自从几年前在uni开始使用Java以来,我才刚刚开始使用Java。我在编程方面的优势在于HTML、PHP和MySQL

额外信息:为表A收集数据的方式是,刮取包含特定用户的所有事件的页面。然后,我的目标是以相反的方式显示它,为每个事件显示所有正在参加的用户


对于如何实现这一点,我希望能得到一些帮助/意见。非常感谢

你不能试试下面这样的方法吗

SELECT 
    eventID,
    userID, 
    GROUP_CONCAT(userName, ",") AS users
FROM table_a
GROUP BY eventID
因此,您可以通过单个查询获得所有数据


请参阅有关的详细信息。

您将这种方式变得太复杂了。您实际上只需要一个查询,而不需要辅助表。首先,抛弃
SimpleCursorAdapter
,而是扩展
BaseAdapter
。我之所以这么说,是因为使用
BaseAdapter
不需要活动的
游标,因此可以用Java来完成这项工作,省去了一个大麻烦,而不是试图用SQL来操作数据

  • 运行第一个查询(按eventID分组)
  • 循环所有结果,将名称添加到字符串(逗号分隔)
  • 当eventId更改时,将字符串转储到容器中并启动一个新的容器
  • 将数据容器传递给
    BaseAdapter

您可能需要一个
事件
对象来将id和名称保持在一起。然后可以将每个
事件添加到ArrayList中,并将其传递给适配器

谢谢Ocus,我现在正在尝试。我得到了下面的错误,我似乎无法理解。我检查了SQLite文档,语法似乎是正确的:E/AndroidRuntime(21880):原因:android.database.SQLite.SQLiteException:near“(”:语法错误:,编译时:选择eventID、eventTitle、eventDate组_CONCAT(用户名,“,”)作为userEvents GROUP BY eventIDUpdate的用户:我认为这是因为在eventDate之后和GROUP_Concat之前遗漏了一个逗号