第一次尝试JDBC连Oracle数据库,RssultSet未正确赋值,求指导

照着视频敲得,没想到还是出现了解决不了的问题。。

错误提示:

Type Exception Report

Description The server encountered an unexpected condition that prevented it from fulfilling the request.

Exception
java.lang.NullPointerException
    com.yql.mainServlet.mainServlet.checklogin(mainServlet.java:63)
    com.yql.mainServlet.mainServlet.service(mainServlet.java:26)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)


Note The full stack trace of the root cause is available in the server logs.


控制台报错代码,我看懂大意是ResultSet赋值未成功,还是null,在后来关闭ResultSet时调用close方法,出现空指针调用报错。

public User checklogin(String name,String pwd)
{
        Connection conn=null;
        PreparedStatement ps=null;
        ResultSet rs=null;
        User u=null;
        try{
        Class.forName("oracle.jdbc.OracleDriver");
        System.out.println("开始链结");
        conn=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:YQL","system","yql19990101");
        System.out.println("连接成功");
        String sql="select * from Student where sname=? and sno=?;";
        ps=conn.prepareStatement(sql);
        ps.setString(1, name);
        ps.setString(2, pwd);
        rs=ps.executeQuery();
        while(rs.next()){
            u=new User();
            u.setName(rs.getString("sname"));
            u.setPassword(rs.getString("sno"));
        }
        }
        catch (Exception e)
        {
            e.getStackTrace();
        }finally{
        try{
        rs.close();  //错误提示在这
        }catch(SQLException e){
            e.getStackTrace();
        }
        try{
            ps.close();
        }catch(Exception e)
        {
            e.getStackTrace();
        }
        try{
            conn.close();
        }catch(Exception e)
        {
            e.getStackTrace();
        }
    }
        return u;
}

1个回答

finally块里,你的逻辑是释放资源,但是要考虑一点:如果你前面的代码(如:获取conn)报错,会导致RssultSet没有被赋值,finally块里释放时,就会报空指针。

解决方法为:finally块里,先判断下释放为空,不为空时再调用方法。

qq_40194953
中心反击王 多谢指导
6 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!