【问题标题】:How to get ResulSet multiple values into Java objects如何将结果集的多个值获取到 Java 对象中
【发布时间】:2021-08-19 11:58:08
【问题描述】:

我有 2 个表 Person (Person_id, name)Address(Address_id, Person_idAd, addressName) 一对多关系。

通过以下查询我得到

String query = "SELECT Person_id, addressName from Person, Address where Person_id = Person_idAd"
        
PreparedStatement pstmt = (PreparedStatement) con.prepareStatement(query);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
        
}
Person_id addressName
1001 Address-1
1001 Address-2
1002 Address-1

我想将此条目映射到 Java 对象中。

class Person {
    int id;
    ArrayList<String> addresses;
    // get and set...
}

请告诉我该怎么做。
谢谢。

【问题讨论】:

  • 今日提示:切换到现代、明确的JOIN 语法。更容易编写(没有错误),更容易阅读(和维护),并且在需要时更容易转换为外连接。

标签: java mysql sql prepared-statement resultset


【解决方案1】:

首先,将ORDER BY Person_id 添加到 [SQL] 查询中。
此外,您的 [SQL] 查询应使用 JOIN

select P.PERSON_ID, A.ADDRESSNAME
  from PERSON P
  join ADDRESS A
    on P.PERSON_ID = A.PERSON_IDAD
 order by P.PERSON_ID

每当PERSON_ID 更改时,创建一个新的Person 对象并设置id 成员。
虽然PERSON_ID 保持不变,但将所有地址收集到java.util.List
您可能还希望另一个java.util.List 来容纳所有人。

java.util.List<Person> people = new java.util.ArrayList<>();
int currentId = 0; // Assuming there is no such ID.
int id;
Person person = null;
java.util.List<String> addresses;
while (rs.next()) {
    id = rs.getInt(1);
    if (id != currentId) {
        if (person != null) {
            person.setAddresses(addresses);
            people.add(person);
        }
        person = new Person();
        person.setId(id);
        currentId = id;
        addresses = new java.util.ArrayList<>();
    }
    addresses.add(rs.getString(2));
}
// Add the last person.
if (person != null) {
    person.setAddresses(addresses);
    people.add(person);
}

当然,作为替代方案,如果相关,您可以使用 Object Relational Mapping (ORM) 工具,例如 Hibernate

【讨论】:

    【解决方案2】:

    你需要在while内构建类似这样的对象

    Person person = null;
    List<String> addrList = new ArrayList<String>();
    while (rs.next()) {
    int id = rs.getXXX() //you will personid 
    
    if(person==null) {
       person = new Person();
       person.setId(id);
       addrList.add(rs.getXXX);
       person.setAddresses(addrList);
    } else if(id!=person.getId()) {
      person = new Person();
       person.setId(id);
       addrList.add(rs.getXXX);
       person.setAddresses(addrList);
    }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多