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

    评论

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?