如何将结果集的多个值获取到 Java 对象中
Posted
技术标签:
【中文标题】如何将结果集的多个值获取到 Java 对象中【英文标题】:How to get ResulSet multiple values into Java objects 【发布时间】: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
语法。更容易编写(没有错误),更容易阅读(和维护),并且在需要时更容易转换为外连接。
【参考方案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);
【讨论】:
以上是关于如何将结果集的多个值获取到 Java 对象中的主要内容,如果未能解决你的问题,请参考以下文章
如何将单个结果集从返回多个集的 SQL 存储过程保存到临时表?