簡體   English   中英

從方法返回的arraylist中訪問元素

[英]Accessing elements from arraylist returned from method

我正在為運行保齡球游戲的Web應用程序編寫代碼。 球員得分保存在數據庫中,以便可以檢索前十名並顯示在主頁上。 問題是,我無法訪問從數據庫中檢索分數的方法返回的arraylist中的值。

這是一個JUnit測試方法:(CDR是最重要的播放器,應斷言為true)

<!-- language: c# -->
public class DatabaseTest {
ScoreDB sdbTest = new ScoreDB();
@Test
public void testTopPl(){
    assertTrue(sdbTest.listTopPlayers().get(0).getName() == "CDR");
    }
}

這是數據庫檢索代碼:

public List<Player> listTopPlayers( ){
        Transaction trns = null;
        Session session = HibernateUtil.getSessionFactory().openSession();
        List<Player> topPlayers = new ArrayList<Player>();

        try {
            trns = session.beginTransaction();
            List<Player> players = session.createQuery("FROM Player").list();

            Collections.sort(players, new ScoreComparator());               

            for (int i=0; i<10; i++){
                topPlayers.add(players.get(i));
            }
            // System.out.print(topPlayers.get(0).getName() + " test");

            trns.commit();
            trns = session.beginTransaction();
          }catch (RuntimeException e) {
              if(trns != null){
                  trns.rollback();
               }
              e.printStackTrace();
              } finally{
                session.flush();
                session.close();
            }
        return topPlayers; 
    }
}

首先,您應該在數據庫中使用order by並在查詢中使用setMaxResults來僅檢索前十名。否則,您可能會遇到內存問題。

其次,您調用兩次開始事務。 僅執行一次,此外,您處於不需處理事務的只讀操作。

最后發布您的問題,您是否得到一些空指針或獨立實體異常? 如果要分離實體,請在要讀取的屬性中使用Hibernate.initialize。

當然,請使用EQUALS比較String。 這可能是您真正的問題。 切勿使用“ ==”運算符比較Java中的字符串。

希望這些技巧對您有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM