此论坛上的一些用户帮助我创建了这个内部联接
SELECT a.*, p.* FROM artist a INNER JOIN pics p on p.id_artist = a.id
查询这些表
artist pics
------------------- ---------------------------------------
| id | name | age | | id_artist | picUrl | picDescription |
------------------- ---------------------------------------
| /\
----------------------------
现在我在循环resultSet时得到的是:
1 michael jackson 50 img/435432.jpg concert
1 michael jackson 50 img/213234.jpg family
1 michael jackson 50 img/123163.jpg concert
喜欢"得到"是:
1 michael jackson 50 img/435432.jpg concert
img/213234.jpg family
img/123163.jpg concert
但我无法理解如何循环它。
我必须将查询的结果放在许多名为Artist的对象中。这些是它的领域
int id;
String name;
int age;
Pic pics [];
这是对象Pic
int idArtist;
String Url;
String Description
所以我应该做的是:
while(resulset.next()){
Artist artist = new Artist();
artist.setId(resulset.getInt("a.id"));
........
Pic pic = new Pic();
pic.setIdArtist(resulset.getInt("a.id"));
pic.setUrl(resulset.getInt("p.picUrl"));
.....
artist.setPic(pic );
}
但这不正确,因为这样我就可以获得db中每张图片的Artist对象。我想要的只是艺术家对象中的一个Artist对象和许多Pic对象。
答案 0 :(得分:1)
希望您有一个想法/方向继续下面的代码。
String myCurrentID = "";
String strPreviousID = "";
while (moreRecordsAvailable)
{
myCurrentID = resulset.getString("ID");
if (!myCurrentID.equals(strPreviousID ))
{
// If the previous and current are different, then add both artist and picture objects
strPreviousID = myCurrentID ;
Artist artist = new Artist();
artist.setId(resulset.getString("a.id"));
........
Pic pic = new Pic();
pic.setIdArtist(resulset.getString("a.id"));
pic.setUrl(resulset.getInt("p.picUrl"));
.....
artist.setPic(pic );
}
else
{
// If previous and current is same, then add only pictures object. Need not add artist object here.
Pic pic = new Pic();
pic.setIdArtist(resulset.getString("a.id"));
pic.setUrl(resulset.getInt("p.picUrl"));
}
}
答案 1 :(得分:0)
如果您想使用JSP
和html
(表格)进行打印,可以循环显示resultset
和html
属性,例如colspan
和{{1 }}将帮助您在rowspan
中生成所需的输出。
答案 2 :(得分:0)
如果你只想用sql做这件事,我想你只需要写一个pl / sql程序就可以做到这一点。首先,它会将您的查询结果保存在一个数组中,然后您可以使用它以您想要的格式自由打印它们。
DECLARE
cursor cursor1
SELECT a.*, p.* FROM artist a INNER JOIN pics p on p.id_artist = a.id;
artist_rec cursor1%rowtype; --structure of one row
Type artist_array IS VARRAY(25) OF cursor1%rowtype -- array structure for holding returned select query
artist_arr artist_array; -- our array variable
i NUMBER:=1;
BEGIN
artist_arr := artist_array; -- initialize array
Open cursor1;
LOOP
FETCH cursor1 into artist_rec
artist_arr .EXTEND(1); -- add another element to array with extend it
artist_arr (i) := artist_rec ; -- assign fetched row to array
i := i + 1; -- increment element count
END LOOP;
CLOSE cursor1;
FOR j IN artist_arr.FIRST.. artist_arr.LAST LOOP
DBMS_OUTPUT_PUTLINE('') -- You can loop in result now, left is about output formats
-- and also you must hold a list of printed artist to avoid
-- not to write again
END LOOP;
END;
答案 3 :(得分:0)
维护List<Artist>
并覆盖Artist#equals
和Artist#hashCode
,仅委托艺术家姓名。然后使用List#contains
查看是否需要添加新的或使用现有的。最后,将pics
设为List<Pic>
,这样您就可以动态地将Pic
添加到Artist
。它是关于代码设计选择的,而不是关于SQL输出的。