2016-02-22 53 views
1
ps = con.prepareStatement(
     "select distinct ur.*,al.*,im.* from user as ur "  
    + "left join album as al " 
    + "on ur.id=al.aid " 
    + "left join images as im " 
    + "on al.id=im.album_id "); 

這裏一個用戶可以有多個專輯,每個專輯可以有多個圖像。 我想從ablove查詢中獲取所有數據。 我已經寫了下面的代碼在多個連接中使用jdbc獲取網絡多個值

List<User> uList=new ArrayList<User>(); 
while (rs.next()) { 

    User u = new User(rs.getLong("ur.id"), rs.getString("ur.fname"), rs.getString("ur.lname"), null); 
Album al = new Album(rs.getLong("al.id"), rs.getString("al.name")); 
Images pi = new Images(rs.getLong("im.image_id"), rs.getString("im.img_desc"), rs.getString("im.sm_pic_path")); 
Set<Images> piSet = new HashSet<Images>(); 
piSet.add(pi); 
al.setImages(piSet); 
Set<Album> alSet = new HashSet<Album>(); 
alSet.add(al); 
u.setAlbums(alSet); 
uList.add(u); 
} 

在這裏,我們如何才能確保所有圖像都附有正確的專輯。

+0

對不起,我沒有在這裏得到你的問題。查詢可確保所有圖像都以正確的「專輯」作爲第一個加入的專輯與用戶和他們的圖像一起附加專輯。這裏有什麼問題? –

+0

我不確定它會一直返回正確的輸出。 – xrcwrn

回答

0

最常見的方式來處理這將是爲了您的SQL:

ORDER BY ur.id, al.id, im.image_id 

一旦你的,你知道,對於一個用戶的所有專輯以及所有圖像的一張專輯會在連續的行 - 這樣你就可以簡單地切換這樣currentUsercurrentAlbum值:

User curentUser = new User(-1); //User with ID -1 
Album currentAlbum = new Album (-1); //Album with ID -1 
List<User> users = new ArrayList<User>(); //List of all users 
while(rs.next()) { 
    User u = new User(rs.getLong("ur.id"), rs.getString("ur.fname"), rs.getString("ur.lname"), null); 
    //CurrentUser has changed! 
    if(u.getId() != currentUser.getId()) { 
    currentUser = u; 
    //Add to list of users 
    users.add(u); 
    } 
    Album al = new Album(rs.getLong("al.id"), rs.getString("al.name")); 
    //Current Album has changed? 
    if(currentAlbum.getId() != al.getId()) { 
    currentAlbum = al; 
     //Add this as album to user 
    currentUser.addAlbum(al); 
    } 
    Images pi = new Images(rs.getLong("im.image_id"), rs.getString("im.img_desc"), rs.getString("im.sm_pic_path")); 
    //Add this image to currentAlbum 
    currentAlbum.addImage(pi); 
} 

Set<Images>需要成爲成員和Set<Album>需要成爲User的成員才能使用 - 但之後,您將得到一個面向對象的詳細目錄清單User,它們的Album s和Images已就位。