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中第一条记录,才可以正确获取查询结果,这正是正确代码所表达的内容。





评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值