如何在Java中把两个结果集rs1、rs2存入同一个ArrayList对象中?

我用下面的两条sql语句分别得到了两个结果集rs1、rs2:
select tb_point.x as A_x,tb_point.y as A_y from tb_line left join tb_point on tb_point.v_id = tb_line.v1_id ;
select tb_point.x as B_x,tb_point.y as B_y from tb_line left join tb_point on tb_point.v_id = tb_line.v2_id ;
现在是要把他们存入一个ArrayList对象中,想要的结构为:
A_x A_y B_x B_y
作为一行数据

请高手赐教!

用一个for循环。
你在java中执行sql语句,肯定是用ResultSet做结果集。
ResultSet rsA;
ResultSet rsB;//代表你的两个结果集
ArrayList<Object> list=new ArrayList();//存放的list集合
while(rsA.next())
{
list.add(rsA.getObject(0));//这里因为不知道你的具体数据类型,所以用Object,你自己可以改正你自己的数据类型
list.add(rsA.getObject(1));

}
while(rsB.next())
{
list.add(rsB.getObject(0));//这里因为不知道你的具体数据类型,所以用Object,你自己可以改正你自己的数据类型
list.add(rsB.getObject(1));

}
后面释放资源什么的。
具体就像这样。你用eclipse编译器,会有提示。追问

你的意思:
while(rsA.next())
{
....
}
while(rsB.next())
{
....
}
这样好像会先把A的结果集存完再存B的
而不是我想要的一条ArrayList记录=A的一条+B的一条
...
请问这样要怎么解决

追答

那也简单,只要这样:
while(rsA.next()||rsB.next())
{
if(!rsA.isAfterLast()){//判断结果集A是否到头
list.add(rsA.getObject(0));//这里因为不知道你的具体数据类型,所以用Object,你自己可以改正你自己的数据类型
list.add(rsA.getObject(1));
}
if(!rsB.isAfterLast()){
list.add(rsB.getObject(0));//这里因为不知道你的具体数据类型,所以用Object,你自己可以改正你自己的数据类型
list.add(rsB.getObject(1));
}
}

追问

我按你的意思改了但结果却是
标识 始点 末点 始点X 始点Y 末点X 末点Y
L1 SWD SBS1 com.microsoft.sqlserver.jdbc.SQLServerException: 结果集没有当前行。
找不到第二个结果集
我想了个办法,像这样的查询我还是先分开存然后在分别提取ArrayList元素再合并

不过还是谢谢了

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-04-01
你可以先用Object[]数组装好,再放进ArrayList追问

嗯,可是A_x A_y在rs1中,B_x B_y在rs2中
在用rs1.next()遍历与rs2.next()遍历分开了

追答

我觉得你还是用HQL好了

追问

要用hibernate框架吗?那么你有什么好的HQL学习的资料吗。或者像我这样的问题用HQL应该怎么写

第2个回答  2014-04-01
那你就封装一个对象,包含那几个字段

java如何实现判断两个结果集中是否有相等元素
public static String []columns = {"empno", "ename", "sal", "hiredate", "deptno"};\/\/结果集rs1和rs2, 判断rs1与rs2中是否有相同元素 public static boolean hasSame(ResultSet rs1, ResultSet rs2) throws SQLException{ List<Map<String, Object>> list1 = new ArrayList<Map<String...

用JSP实现一个简易的网页版聊天室。
1.登录页面 文件名:know.jsp <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+":\/\/"+request.getServerName()+":"+request.getServerPort()+path+"\/";%><!DOCTYPE HTML PUBLIC ...

相似回答