寫之前,先告戒一下自己......寫代碼一定要細心,自己寫的即使是非常簡單的地方也要細心,不能自我感覺太良好,那往往可能會有些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只有一行的錯誤......