高手来,关于sql有多个集合返回时,各个集合的数据怎么取?

wangprince 2008-01-29 11:42:15
我的代码如下:
Statement sql;
ResultSet rs;
if(sql.execute("select * from a go select * from b go select * from c"))
System.out.println("success get data!");
rs=sql.getResultSet();
while(rs.next())
System.out.println("a record:"+rs.getString(1));

if(sql.getMoreResults())
System.out.println("first sql.getMoreResults() success");
rs=sql.getResultSet();
while(rs.next())
System.out.println("b record:"+rs.getString(1));

if(sql.getMoreResults())
System.out.println("second sql.getMoreResults() success");
rs=sql.getResultSet();
while(rs.next())
System.out.println("c record:"+rs.getString(1));

应该是把每个表的第一个字段的值都输出了。但是结果却不是。很奇怪!请高手赐教!
...全文
369 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangprince 2008-01-30
  • 打赏
  • 举报
回复
真正写sql我当然不会这么写,问题是用sql为sp_help时他返回的本身就是多集合的。我现在这么写是为了测试多集合的操作过程。
yami251139 2008-01-30
  • 打赏
  • 举报
回复
我覺得你的想法有錯誤
為什么要多個集合返回呢
寫個共通,讓別的調用,每次返回一個集合不好嗎?
java就是要看的簡明流暢才好。。
而且你這樣寫rs返回的數據是3個表的 但是顯示在一張表單中
每個表的字段長度不同,當中取值很困難很煩(但不是不能)。。
我一般不這么做。。
只是提點建議而已
cangyue87 2008-01-29
  • 打赏
  • 举报
回复
select * from a go select * from b go select * from c

hql或者sql能不能这么写我不太清楚,楼主代码运行没报错吗?

如果可以的话,3个表的结果也是放在一个结果集里的rs.getString(1)得到的是整个结果集的第一个...
假如楼主代码可行,而且3个表都是3个字段.
那么分用
rs.getString(1)代表第一个表的首字段,
rs.getString(4)代表第二个表的首字段,
rs.getString(7)代表第三个表的首字段...

当然,我先怀疑hql语句不对...

哪怕能这么用,也分开查询比较好....
wangprince 2008-01-29
  • 打赏
  • 举报
回复
那这种情况下应该怎么获得b表中的数据?
accept88 2008-01-29
  • 打赏
  • 举报
回复
兄弟..你这个SQL语句查出来只是一个集合好不好..杂可能是两个集合呢?
wangprince 2008-01-29
  • 打赏
  • 举报
回复
按照shan1119兄的办法我测试了一下,代码如下:
sql.execute("select * from a go select * from b go");
//sql.getMoreResults();//此句用来将sql跳至下一个集合,先屏蔽

rs=sql.getResultSet();
rs.next();
ResultSetMetaData md = rs.getMetaData();

for(int i=1;i<=md.getColumnCount();i++){//打印表各个列的名称
System.out.println(md.getColumnName(i));
}

while(rs.next())//打印第1列的值
System.out.println("first column:"+rs.getString(1));

这时结构打印出来的是a表列名和a表的第1列的值。
但如果把sql.getMoreResults();加上,打印出来的结果是b表列名和一些看不懂的值,反正肯定不b表的第1列的值。不知道这些值从那里来。
大家再给帮忙分析一下啊。晕了。

shan1119 2008-01-29
  • 打赏
  • 举报
回复
你用这段代码看看每一列的情况.
		ResultSetMetaData md = rs.getMetaData();
for(int i=0;i<md.getColumnCount();i++){
System.out.println(md.getColumnName(i));
}
wangprince 2008-01-29
  • 打赏
  • 举报
回复
rs返回的肯定是多集合,查询分析器执行的结果就是多集合,这个是一样的。问题是java 好象没有dataset啊。
shan1119 2008-01-29
  • 打赏
  • 举报
回复
是.net里的Dataset.java里的还没用过.
shan1119 2008-01-29
  • 打赏
  • 举报
回复
我知道sqlserver里可以写多个sql然后一起执行,取得结果防盗DataSet里,DataSet里每一个检索对应一个table

你这个可能也是那种情况吧,你用查询分析器看看,执行的结果是什么样子的.
cangyue87 2008-01-29
  • 打赏
  • 举报
回复
数据库sql方面我还是新手....所以这样的话我也不清楚问题所在了...

楼主可以尝试设置断点,debug看一看rs里究竟返回了什么...

如果rs.getString(5)报错,那么也许rs里只返回了4个字段的数据 ....
wangprince 2008-01-29
  • 打赏
  • 举报
回复
sql语句没问题。我的数据库是sybase,可以执行通过。
因为表a有4个字段,我把上述语句改成:
System.out.println("0:correct record:"+rs.getString(1)+rs.getString(2)+rs.getString(3)+rs.getString(4));
就可以正常显示。
我按照你所说的办法,把代码改成:
rs=sql.getResultSet();
while(rs.next())
System.out.println("0:correct record:"+rs.getString(5));
则执行出错。
所以你所说的:
rs.getString(1)代表第一个表的首字段,
rs.getString(4)代表第二个表的首字段,
rs.getString(7)代表第三个表的首字段...
好象不行啊。

另外我这么写sql是想测试多集合返回后如何处理的。事实上我是要用"sp_help a"语句的,而sp_help的结果是多集合的。

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧