布衣王子

Email:roose2008@gmail.com QQ:79212131

NullPointerException 错误耗费我一天了时间了,今天又耗了半天了

java.lang.NullPointerException
在网上找了很久,也有很多相关的贴。大都多说是引用的对象为空,但在程序里我测试过了。rs对象并不为空。但是每当调用rs.getxx..(String ....)方法是就出现java.lang.NullPointerException
异常。也有人说是数据库里不存在root字段,但在我的数据库里我检查过好多次了。现在真不知道如何是好了。我也怀疑过是不是rs的作用域问题。但还是没什么结果。
希望高手能帮帮忙。在这里谢谢了。
甚至我怀疑过是不是没一个Statement职能唯一返回一个RsRsult对象。定义了两个Staement.但是,郁闷的是当第二次调用get.xxx()方法时又出现java.lang.NullPointerException.哎。。。。

<%--2008.10.1 ZiGong--%>

<%@ page language="java" contentType="text/html; charset=GBK" pageEncoding="GBK"%>
<%@ page import = "java.sql.*" %>
<%@ page import = "java.lang.*" %>

<%---------------------------method delete-----------------------------%>
<%!private void delete(Connection conn, int id) {
    Statement stat = null;
    ResultSet rs = null;
    int deleteid = 0;
    try {
        stat = conn.createStatement();
        rs = stat.executeQuery("select * from bbsrecord where sid=" + id);
        while (rs.next()) {
            deleteid = rs.getInt("id");
            if (rs.getInt("leaf") == 0) {
                stat.execute("delete from bbsrecord where id =" + deleteid);
                delete(conn, deleteid);
            } else {
                stat.execute("delete from bbsrecord where id =" + deleteid);
            }
        }
    } catch (SQLException e) {
        System.out.println("SQL erro!");
    } finally {
        try {
            rs.close();
            stat.close();
        } catch (SQLException e) {
            System.out.println(":sqlexception:can not close");
        }
    }
}
%>
<%--------------------------the delete.jsp'start------------------------%>
<%
            int id = Integer.parseInt(request.getParameter("id"));
            int sid = 0;
            Class.forName("java.sql.Driver");
            Connection conn = null;
            Statement stat = null;
            String urlstring = "jdbc:mysql://127.0.0.1:3306/test?user=root&password=159753";
            conn = DriverManager.getConnection(urlstring);
            stat = conn.createStatement();     
         try {
                ResultSet rs = stat.executeQuery("select * from BbsRecord where id=" + id);
                rs.next();
                sid = rs.getInt("sid");
                ResultSet rss = stat.executeQuery("select * from bbsrecord where sid=" + sid);
                rss.last();
               
                if (rss.getRow() == 1) {
                    if (rs.getInt("root") == 0) {  //错误报告指示的是这里,但我不理解,也找不到原因。
                        stat.execute("update bbsrecord set leaf = 1 where id=" + sid);
                        stat.execute("delete from bbsrecord where id =" + id);
                        if (rs.getInt("leaf") == 0) {
                            delete(conn,id);
                        }
                    }
                } else {
                    stat.execute("delete from bbsrecord where id =" + id);
                    if (rs.getInt("leaf") == 0) {
                        delete(conn, id);
                    }
                }
                rs.close();
                rss.close();
            } catch (SQLException e) {
                System.out.println("sql异常");
            } finally {

                stat.close();
                conn.close();
            }
%>
<%----------------------------- html ---------------------------------%>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=gbk">
        <title>数据的树型展现</title>
    </head>
    <body>
        <center>
            <h2><%="deleting record is succeed"%>
            <%//response.sendRedirect("showtree.jsp");%></h2>
        </center>
    </body>
</html>

错误报告

HTTP Status 500 -


type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: java.lang.NullPointerException
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:522)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:416)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

 

root cause

java.lang.NullPointerException
com.mysql.jdbc.ResultSetImpl.findColumn(ResultSetImpl.java:1059)
com.mysql.jdbc.ResultSetImpl.getInt(ResultSetImpl.java:2719)
org.apache.jsp.delete_jsp._jspService(delete_jsp.java:110)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

 

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.16 logs.



posted on 2008-10-03 00:16 草包书生 阅读(4126) 评论(20)  编辑  收藏

评论

# re: NullPointerException 错误耗费我一天时间了 2008-10-03 00:56 blackbat

不会把 居然有这种事情
rs.getInt("root") 换成rs.getInt(1) 就是对应的列的序号。
  回复  更多评论   

# re: NullPointerException 错误耗费我一天时间了[未登录] 2008-10-03 03:02 tony

没找到列名为"root"的列,因此抛出错误  回复  更多评论   

# re: NullPointerException 错误耗费我一天时间了 2008-10-03 03:36 草包书生

@blackbat
老大,我换了。但还是出错,而且还是这里 if (rs.getInt("root") == 0)   回复  更多评论   

# re: NullPointerException 错误耗费我一天时间了 2008-10-03 03:38 草包书生

@草包书生
无论是使用 rs.getInt(int xxxx)还是rs.getInt(String xxxx)都是一样的效果啊。
我数据库里的确有root字段,而且数据类型也是int型。  回复  更多评论   

# re: NullPointerException 错误耗费我一天时间了 2008-10-03 03:40 草包书生

在mysql数据库里,整形数据 int 若值为0 的话,mysql将把该值视为空吗?  回复  更多评论   

# re: NullPointerException 错误耗费我一天时间了 2008-10-03 03:42 草包书生

各位好心人,都来帮帮忙啊?急啊!  回复  更多评论   

# re: NullPointerException 错误耗费我一天时间了 2008-10-03 03:43 隔叶黄莺

何不输出来看看,它长什么样呢?  回复  更多评论   

# re: NullPointerException 错误耗费我一天时间了 2008-10-03 03:48 草包书生

你是说把rs对象的描述输出来么?  回复  更多评论   

# re: NullPointerException 错误耗费我一天时间了 2008-10-03 03:57 草包书生

我把rs打印出来,出了类名之外,没有任何信息。
你们快点来 啊。我快虚脱了  回复  更多评论   

# re: NullPointerException 错误耗费我一天时间了 2008-10-03 04:37 Rene

rs.getString(String xxxx)  回复  更多评论   

# re: NullPointerException 错误耗费我一天时间了 2008-10-03 07:52 steveneo

I almost forget JDBC stuff. But some hints:
Check rs.getInt() return object "Integer" or primary type "int". If former one, rs.getInt() == 0 could throw nullpoint, as JDK5 will do automatically conversion from "Integer" to "int". if Integer is null, here will throw NullPointerExp.

Btw, check database table, column "root" must has some int value, such as 0, rather than "null"
Good luck.  回复  更多评论   

# re: NullPointerException 错误耗费我一天时间了 2008-10-03 08:41 wanbing1986

哎,把那个空的rs.getString("root")打印出来看下是不是空值.

上面的人英语太厉害了,是不是中国人哦.  回复  更多评论   

# re: NullPointerException 错误耗费我一天时间了 2008-10-03 10:39 隔叶黄莺

如果这点基本的除错技能都没有,这个耗你一天,那个耗你若干天,你还要不要做开发了呢?  回复  更多评论   

# re: NullPointerException 错误耗费我一天时间了 2008-10-03 10:59 Lvyuanfang

查看root列的所有值,是不是有null的。首先要搞清楚ResultSet为空,还是rs.getInt() 为空。楼主好好看看,空指针异常都是写代码不严谨导致。。  回复  更多评论   

# re: NullPointerException 错误耗费我一天时间了 2008-10-03 12:49 草包书生

问题还没解决:
org.apache.jasper.JasperException: An exception occurred processing JSP page /delete.jsp at line 53

50: sid = rs.getInt("sid");
51: ResultSet rss = stat.executeQuery("select * from bbsrecord where sid=" + sid);
52: rss.last();
53: out.println(rs.getString("title"));
54: /**
55: if (rss.getRow() == 1) {
56: if (rs.getInt("root") == 0) {

为什么前面的sid = rs.getInt("sid");能执行不会抛出异常,到第二次调用getString()时就抛出异常了?
在第一次调用sid = rs.getInt("sid");后我用
if(rs != null){
out.println("rs is not null");
}
结果为
rs is not null
也就是,rs并不为空。
这是怎么回事?难道是mysql数据库软件本身的问题?吗?

  回复  更多评论   

# re: NullPointerException 错误耗费我一天了时间了,今天又耗了半天了 2008-10-03 12:52 草包书生

@隔叶黄莺
org.apache.jasper.JasperException: An exception occurred processing JSP page /delete.jsp at line 53

50: sid = rs.getInt("sid");
51: ResultSet rss = stat.executeQuery("select * from bbsrecord where sid=" + sid);
52: rss.last();
53: out.println(rs.getString("title"));
54: /**
55: if (rss.getRow() == 1) {
56: if (rs.getInt("root") == 0) {

为什么前面的sid = rs.getInt("sid");能执行不会抛出异常,到第二次调用getString()时就抛出异常了?
在第一次调用sid = rs.getInt("sid");后我用
if(rs != null){
out.println("rs is not null");
}
结果为
rs is not null
也就是,rs并不为空。
这是怎么回事?难道是mysql数据库软件本身的问题?吗?
  回复  更多评论   

# re: NullPointerException 错误耗费我一天了时间了,今天又耗了半天了 2008-10-03 12:52 草包书生

@steveneo
org.apache.jasper.JasperException: An exception occurred processing JSP page /delete.jsp at line 53

50: sid = rs.getInt("sid");
51: ResultSet rss = stat.executeQuery("select * from bbsrecord where sid=" + sid);
52: rss.last();
53: out.println(rs.getString("title"));
54: /**
55: if (rss.getRow() == 1) {
56: if (rs.getInt("root") == 0) {

为什么前面的sid = rs.getInt("sid");能执行不会抛出异常,到第二次调用getString()时就抛出异常了?
在第一次调用sid = rs.getInt("sid");后我用
if(rs != null){
out.println("rs is not null");
}
结果为
rs is not null
也就是,rs并不为空。
这是怎么回事?难道是mysql数据库软件本身的问题?吗?
  回复  更多评论   

# re: NullPointerException 错误耗费我一天了时间了,今天又耗了半天了 2008-10-03 12:55 草包书生

更奇怪的是第一次调用sid = rs.getInt("sid");能通过
马上第而次sid = rs.getInt("sid");就出现异常了,难道有鬼啊
  回复  更多评论   

# re: NullPointerException 错误耗费我一天了时间了,今天又耗了半天了 2008-10-03 14:06 草包书生

啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊。。。。。。。。。。
问题解决了!原来是。。。。!多个ResultSet不能共享同一个Statement。
基础知识欠缺啊!在jdkAPI中sun公司有没说明这一点。真是库了我。
还好功夫不负有心人。谢谢javablog的兄弟了。再次感谢!
努力,坚持就是胜利!

哎,基础不扎实。
整一个悲字了得。  回复  更多评论   

# re: NullPointerException 错误耗费我一天了时间了,今天又耗了半天了 2008-12-30 13:26 北京时间

你是说把rs对象的描述输出来么?  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 

导航

常用链接

相册

java的相关连接

最新评论