用于从resultset获取不同用户的groovy脚本/java代码

用于从resultset获取不同用户的groovy脚本/java代码,java,groovy,Java,Groovy,嗨,我在oracle中对一个表运行一个简单的select查询,并得到一个结果集。如从mytable中选择用户名、职责、项目。 结果集包含用户详细信息。为每个用户名返回多行,其中责任和项目的值不同。 现在我想从这个结果集中得到一个列表,每个用户名有一个列表,不同的值以逗号分隔的字符串连接起来。 因此,如果Sam在resultset中有多个条目,则我的操作的输出应给出: UserList = ["Sam", "responsibility1,responsibility2,responsibilit

嗨,我在oracle中对一个表运行一个简单的select查询,并得到一个结果集。如
从mytable中选择用户名、职责、项目。

结果集包含用户详细信息。为每个用户名返回多行,其中责任和项目的值不同。 现在我想从这个结果集中得到一个列表,每个用户名有一个列表,不同的值以逗号分隔的字符串连接起来。
因此,如果Sam在resultset中有多个条目,则我的操作的输出应给出:

UserList =
["Sam", "responsibility1,responsibility2,responsibility3...", "dept1,dept2,dept3.."],
[Some other User],
[and so on..]
稍后我会将其写入csv文件。
由于兼容性原因,我无法在查询本身中执行此操作,我们必须在将来支持多个数据库和版本。
如何在java或groovy中实现这一点?

谢谢

Java非常简单。 您需要一个类来为每个用户建模。 您需要用户名到用户的映射。 每个用户都包含一个职责列表和一个部门列表。 然后迭代结果集,从每一行的映射中找到用户,并将职责和部门添加到该用户

你需要代码还是足够好

编辑:以下是一些Java起始代码: (未检查语法或错误;])

公共类用户{
私有最终列表责任=新建ArrayList();
私有最终列表部门=新ArrayList();
…标准的接受者和接受者
}
//执行读取操作的代码
公共无效执行者{
…以某种方式在此处获取结果集
Map usernameToUser=new HashMap():
while(rs.next){
字符串用户名=rs.getString(“用户名”);
User=usernameToUser.get(用户名);
if(user==null){
user=new user();//创建并记住第一次看到的用户
usernameToUser.put(用户名,用户);
}
字符串责任=rs.getString(“责任”);
String department=rs.getString(“department”);
用户责任(责任);
用户.添加部门(部门);
}
rs.close();
//现在,内存中有了用户的数据结构,可以输出
//它可以是您喜欢的任何格式,例如HTML、CSV等
//可能最好在一个完全独立的地方完成这一步
//以后将切换为不同的输出格式。
}

谢谢你的提示,大卫。我问groovy的唯一原因是闭包使其成为一行代码。下面的代码删除了sumMap中的重复项,并为该用户汇总了映射中的另一个字段。。我需要字符串concat而不是sum。def finalMap=sumMap.groupBy{it[1]}.collect{k,v->[(k):v*.first().sum()]}.sum()有趣的groovy代码,我自己没有做太多特定于groovy的语法。java代码远不止你知道的一行代码-你在寻找一行解决方案吗?在答案编辑中快速尝试了一些代码-比Groovy代码多,但我认为更容易理解?
public class User {
    private final List<String> responsibility = new ArrayList<String>();
    private final List<String> department = new ArrayList<String>();

    ...standard getters and setters
}

// Your code to do the read
public void executeRead() {

    ... obtain the resultset somehow here

    Map<String, User> usernameToUser = new HashMap<String, User>():
    while (rs.next) {
        String username = rs.getString("username");
        User user = usernameToUser.get(username);
        if (user == null) {
            user = new User(); // Create and remember a user the first time you see them
            usernameToUser.put(username, user);
        }
        String responsiblity = rs.getString("responsiblity");
        String department = rs.getString("department");
        user.addResponsibility(responsibility);
        user.addDepartment(department);
    }
    rs.close();

    // Now you have the data structure of users in memory you can output
    // it in whichever format you like e.g. HTML, CSV, etc
    // Probably best to do this step in a totally separate place that can
    // be switched out for a different output format in future.
}