1. 程式人生 > >JAVA那點兒事之查詢SQL Sever結果集為空

JAVA那點兒事之查詢SQL Sever結果集為空

錯誤描述:

在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中第一條記錄,才可以正確獲取查詢結果,這正是正確程式碼所表達的內容。