布衣王子

          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 草包書生 閱讀(4550) 評論(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的相關連接

          最新評論

          主站蜘蛛池模板: 阜南县| 酉阳| 揭西县| 得荣县| 蒙自县| 邵东县| 镇安县| 武乡县| 弥勒县| 遵义县| 泽库县| 高雄县| 关岭| 怀仁县| 体育| 乌鲁木齐市| 屏南县| 沭阳县| 二连浩特市| 灵宝市| 商都县| 普兰县| 宁乡县| 辉南县| 呈贡县| 永新县| 积石山| 资兴市| 历史| 新邵县| 山阳县| 顺昌县| 旺苍县| 台北市| 安达市| 镇江市| 赣州市| 贵溪市| 五常市| 广丰县| 太湖县|