ResultSet只返回一行數據的原因


  寫之前,先告戒一下自己......寫代碼一定要細心,自己寫的即使是非常簡單的地方也要細心,不能自我感覺太良好,那往往可能會有些bug在等着你......

  注意事項:

  1、當你為了查看數據庫中是否存在某條記錄時,比如查詢表中是否有某賬號名,有就返回前台一個“該賬號已注冊”的消息。諸如此類的單查詢時,可以這么寫:

  

       if(rs.next()){
                user.setName(rs.getObject("name").toString());
                user.setPwd(rs.getObject("password").toString());
                user.setPhone(rs.getObject("phone").toString());
                user.setSex(rs.getObject("sex").toString());
                user.setBirthday(rs.getObject("birthday").toString());
                user.setAdress(rs.getObject("adress").toString());
                user.setEmail(rs.getObject("email").toString());
            } else{
                return null;
            }

這里用了“if”,是可以的,因為就是為了查看是否有這么個User,有就返回信息,沒有就null。但是,如果想要返回的不止是一個User,而是我想查看所有的User,或者加上某些條件。總之想要查詢得到一個集合,然后存入List或者Map,記住!用while,而不是if。可能大多數人不會跟我一樣傻......寫在這里提醒自己一下吧,要是有緣人相見,但願對你有所幫助。

  2、除了上一種錯誤會導致ResultSet只返回一行,貌似還有一種情況,我看到網上有人提到這種代碼:

  

       Product product = new Product();
            while(rs.next()){                                                
                product.setName(rs.getObject("name").toString());                
                product.setType(rs.getObject("type").toString());
                product.setPrice(rs.getInt("price"));                
                product.setStock(rs.getInt("stock"));
                product.setSell(rs.getInt("sell"));
                product.setImgurl(rs.getObject("imgurl").toString());
                plist.add(product);
            }

  這里,當你把這個Product對象放在while循環外面是錯的,但是並不會只返回一條記錄,而是會返回很多條一樣的記錄。這是因為只有一個product對象在不停的被add在list里面,但是經過實踐檢驗,我發現重復add的都是表中最后一條記錄:

  

比如此表,執行查詢add到list之后:

  

 

這在我的理解中是因為第一個product在add到List之后,第二個product(其實還是第一個product,因為就一個product對象)被賦予了新的屬性,同時第一個product的屬性也會被刷新覆蓋了。以此類推,直到最后一個product的屬性被重新賦予,之前所有的List記錄都會被刷新變為最后一次所賦予的屬性值。不知道原理是不是這樣,我就先這么理解了...... 

  所以,這么寫的代碼並不會造成ResultSet只有一行的錯誤......

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM