中心反击王 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块里,先判断下释放为空,不为空时再调用方法。

    评论

报告相同问题?

悬赏问题

  • ¥15 代码的修改,添加和运行完善
  • ¥15 krpano-场景分组和自定义地图分组
  • ¥15 lammps Gpu加速出错
  • ¥15 关于PLUS模型中kapaa值的问题
  • ¥15 关于博途V17进行仿真时无法建立连接问题
  • ¥15 机器学习教材中的例题询问
  • ¥15 求.net core 几款免费的pdf编辑器
  • ¥15 为什么安装HCL 和virtualbox之后没有找到VirtualBoxHost-OnlyNetWork?
  • ¥15 C# P/Invoke的效率问题
  • ¥20 thinkphp适配人大金仓问题