中心反击王 2019-03-17 12:54 采纳率: 33.3%
浏览 349

第一次尝试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条回答

  • shaffer_w 2019-03-18 17:41
    关注

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

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

    评论

报告相同问题?

悬赏问题

  • ¥20 matlab计算中误差
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊