之前對resultset結果集的next()方法的引用沒太多在意,常常就是直接while(rs.next())進行遍歷。
如果要對rs結果集做是否為空進行判斷的話,很多人第一想法是 if(rs == null),這是錯誤的,無論什麼結果都會返回 false 的結果,
在這裡我們就需要用if(rs.next())或者是if(rs.first())。前者是判斷rs是否有值,沒有時返回false;後者是判斷rs指標是否指在第一條,如果為空時返回false。
因為rs初始化時是指在第一條的,而我們在呼叫next()、first()等方法後,它就會指向第二條,因此在做完判斷我們需要給指標前移一位,用previous()這個方法。
if(rs.first())
while(rs.next())
這裡用first()方法是個人習慣,用next()方法也是同樣的原理。
有些人會說為什麼要判斷,直接遍歷不好嗎,多此一舉。。。。但是我們如果需要根據結果來初始化物件時,就需要做判斷,就像我上面的**一樣。
因為以前也是拿到rs後直接就while(rs.next)進行遍歷了,所以也沒發現問題。今天碰巧遇到了,給自己留點記憶,供自己也是提醒朋友們避免這個問題。
ResultSet結果集為空判斷
工作中碰上,在網上看了半天,才發現 如果要對rs結果集做是否為空進行判斷的話,很多人第一想法是 if rs null 這是錯誤的,無論什麼結果都會返回 false 的結果,在這裡我們就需要用if rs.next 或者是if rs.first 前者是判斷rs是否有值,沒有時返回false 後者是判斷r...
結果集ResultSet獲取行數
最近有課,跟著老師寫個小微博,他的介面是這樣的 然後在獲取微博數的時候我跳進了坑!老師用的jdbc,select那塊是list,map然後在獲取以後可以直接通過size 獲取微博數,我用的c3p0返回的resulset結果集,所以悲劇發生了 看下我的code public int getcountw...
mysql結果集ResultSet列別名
今天碰到乙個mysql結果集別名顯示異常的問題 resultsetmetadata.getcolumnname 和 resultsetmetadata.getcolumnlabel的區別 簡單的講就是 對於查詢語句select cd.id client data id from dual來說 res...