JAVA那點兒事之查詢SQL Sever結果集為空
阿新 • • 發佈:2019-02-01
錯誤描述:
在JAVA程式中查詢SQL Sever時,有時會出現明明資料庫中存在資料,但是查詢解決為空,錯誤程式碼為:
com.microsoft.sqlserver.jdbc.SQLServerException: 結果集沒有當前行。錯誤程式碼:
相關的表如下:
String sql="select * from test where TID=1;"; System.out.println(sql); ResultSet rs1; rs1=db.executeQuery(sql); try{ String sss=rs1.getString("testName"); System.out.println("testName="+sss); } catch (SQLException e1) {System.out.println(e1);} System.out.println(7); db.sqlclose();
在這種情況下查詢結果為null,錯誤為上面紅色的錯誤。
正確程式碼:
將上面的程式碼修改如下:
此時可以正常查詢到資料,在輸出框中的輸出為:String sql="select * from test where TID=1;"; System.out.println(sql); ResultSet rs1; rs1=db.executeQuery(sql); try{ if(rs1.next()){ String sss=rs1.getString("testName"); System.out.println("testName="+sss); } } catch (SQLException e1) {System.out.println(e1);} System.out.println(7); db.sqlclose();
testName=11
對這種現象的解釋:
結果集rs的位置初始時位於第一條記錄的前面,即為0。所以在錯誤程式碼中,會出現結果集當前行為空。這是ResultSet指向的問題,ResultSet取值後,指標預設指向index為-1的一個元素,即ResultSet中第一個元素(index為0)的前面,這時指標預設指向是不存在元素的,因此出現錯誤。必須呼叫.next()函式才能將ResultSet的指標指向查詢結果中的第一個元素,進而對ResultSet進行遍歷。總之,用一句話概括就是:上面的兩段程式碼都正確從資料庫中查詢到了結果,但是錯誤程式碼在ResultSet中讀取值時,讀取的是index為0的前一個記錄,即空記錄,必須通過.next()方法將index+1,使之指向index為0,即ResultSet中第一條記錄,才可以正確獲取查詢結果,這正是正確程式碼所表達的內容。