2016-02-01 49 views
0

我有一個DAO java類。在DAO中,我執行一個本地SQL查詢,它從數據庫輸出兩條記錄。結果打印在控制檯上。但是,調用該方法時,只返回一條記錄。爲什麼?使用Java的問題

DAO的Java Class:

public Showroom SearchShowroom(String carMake){ 

    Session session = sessionFactory.openSession(); 
    Transaction tx = session.beginTransaction(); 
    SQLQuery query = session.createSQLQuery("SELECT * from showroom); 

     tx.commit(); 
     session.close(); 
    return sw; 
} 
+0

評論1:爲什麼要提交只讀事務? – borjab

+0

註釋2:不要對SQL查詢使用字符串連接使用參數。你打開你的代碼到SQL注入。 – borjab

+0

評論3:你在使用Spring嗎?如果是這種情況,你可能會更好地使用服務中的Spring @Transactional註解。這樣,當您需要時,您可以靈活地在大型交易中組合DAO呼叫。您可以將操作範圍與操作分開 – borjab

回答

3

你只返回您在您的循環創建(並丟棄所有其他)最後Showroom對象。如果您想返回所有這些,將它們添加到List並返回List作爲結果:

public List<Showroom> SearchShowroom(String carMake){ 
    ... 
    List<Showroom> allResult = new ArrayList<>(); 
    for(Object[] data : result){ 
     Showroom sw = new Showroom(); 
     ... 
     allResult.add(sw); 
    } 
    ... 

    return allResult; 
} 

除此之外立即解決此問題,還請考慮@borjab的意見。特別是,從不使用字符串連接將變量注入SQL語句 - 總是使用綁定變量。有關更多信息,請參閱What is SQL injection?

+0

我已經修改了MVC圖案用我的託管Bean如下: '公開名單 find()會拋出異常{ \t \t ShowroomManager SM =新的ShowroomManager(); \t return sm.SearchShowroom(make1); \t}' – Baadshah

+0

我的JSF如下:http://pastebin.com/0EcT2duN 但它仍然不顯示! :( 請幫助 – Baadshah

+0

也許這將有助於:http://stackoverflow.com/questions/9186364/how-do-i-display-a-list-of-items-from-a-bean-onto-a-jsf - 網頁 –