布衣王子

          Email:roose2008@gmail.com QQ:79212131

          NullPointerException 錯(cuò)誤耗費(fèi)我一天了時(shí)間了,今天又耗了半天了

          java.lang.NullPointerException
          在網(wǎng)上找了很久,也有很多相關(guān)的貼。大都多說(shuō)是引用的對(duì)象為空,但在程序里我測(cè)試過(guò)了。rs對(duì)象并不為空。但是每當(dāng)調(diào)用rs.getxx..(String ....)方法是就出現(xiàn)java.lang.NullPointerException
          異常。也有人說(shuō)是數(shù)據(jù)庫(kù)里不存在root字段,但在我的數(shù)據(jù)庫(kù)里我檢查過(guò)好多次了。現(xiàn)在真不知道如何是好了。我也懷疑過(guò)是不是rs的作用域問(wèn)題。但還是沒(méi)什么結(jié)果。
          希望高手能幫幫忙。在這里謝謝了。
          甚至我懷疑過(guò)是不是沒(méi)一個(gè)Statement職能唯一返回一個(gè)RsRsult對(duì)象。定義了兩個(gè)Staement.但是,郁悶的是當(dāng)?shù)诙握{(diào)用get.xxx()方法時(shí)又出現(xiàn)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) {  //錯(cuò)誤報(bào)告指示的是這里,但我不理解,也找不到原因。
                                  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>數(shù)據(jù)的樹(shù)型展現(xiàn)</title>
              </head>
              <body>
                  <center>
                      <h2><%="deleting record is succeed"%>
                      <%//response.sendRedirect("showtree.jsp");%></h2>
                  </center>
              </body>
          </html>

          錯(cuò)誤報(bào)告

          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 草包書(shū)生 閱讀(4543) 評(píng)論(20)  編輯  收藏

          評(píng)論

          # re: NullPointerException 錯(cuò)誤耗費(fèi)我一天時(shí)間了 2008-10-03 00:56 blackbat

          不會(huì)把 居然有這種事情
          rs.getInt("root") 換成rs.getInt(1) 就是對(duì)應(yīng)的列的序號(hào)。
            回復(fù)  更多評(píng)論   

          # re: NullPointerException 錯(cuò)誤耗費(fèi)我一天時(shí)間了[未登錄](méi) 2008-10-03 03:02 tony

          沒(méi)找到列名為"root"的列,因此拋出錯(cuò)誤  回復(fù)  更多評(píng)論   

          # re: NullPointerException 錯(cuò)誤耗費(fèi)我一天時(shí)間了 2008-10-03 03:36 草包書(shū)生

          @blackbat
          老大,我換了。但還是出錯(cuò),而且還是這里 if (rs.getInt("root") == 0)   回復(fù)  更多評(píng)論   

          # re: NullPointerException 錯(cuò)誤耗費(fèi)我一天時(shí)間了 2008-10-03 03:38 草包書(shū)生

          @草包書(shū)生
          無(wú)論是使用 rs.getInt(int xxxx)還是rs.getInt(String xxxx)都是一樣的效果啊。
          我數(shù)據(jù)庫(kù)里的確有root字段,而且數(shù)據(jù)類(lèi)型也是int型。  回復(fù)  更多評(píng)論   

          # re: NullPointerException 錯(cuò)誤耗費(fèi)我一天時(shí)間了 2008-10-03 03:40 草包書(shū)生

          在mysql數(shù)據(jù)庫(kù)里,整形數(shù)據(jù) int 若值為0 的話,mysql將把該值視為空嗎?  回復(fù)  更多評(píng)論   

          # re: NullPointerException 錯(cuò)誤耗費(fèi)我一天時(shí)間了 2008-10-03 03:42 草包書(shū)生

          各位好心人,都來(lái)幫幫忙啊?急啊!  回復(fù)  更多評(píng)論   

          # re: NullPointerException 錯(cuò)誤耗費(fèi)我一天時(shí)間了 2008-10-03 03:43 隔葉黃鶯

          何不輸出來(lái)看看,它長(zhǎng)什么樣呢?  回復(fù)  更多評(píng)論   

          # re: NullPointerException 錯(cuò)誤耗費(fèi)我一天時(shí)間了 2008-10-03 03:48 草包書(shū)生

          你是說(shuō)把rs對(duì)象的描述輸出來(lái)么?  回復(fù)  更多評(píng)論   

          # re: NullPointerException 錯(cuò)誤耗費(fèi)我一天時(shí)間了 2008-10-03 03:57 草包書(shū)生

          我把rs打印出來(lái),出了類(lèi)名之外,沒(méi)有任何信息。
          你們快點(diǎn)來(lái) 啊。我快虛脫了  回復(fù)  更多評(píng)論   

          # re: NullPointerException 錯(cuò)誤耗費(fèi)我一天時(shí)間了 2008-10-03 04:37 Rene

          rs.getString(String xxxx)  回復(fù)  更多評(píng)論   

          # re: NullPointerException 錯(cuò)誤耗費(fèi)我一天時(shí)間了 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.  回復(fù)  更多評(píng)論   

          # re: NullPointerException 錯(cuò)誤耗費(fèi)我一天時(shí)間了 2008-10-03 08:41 wanbing1986

          哎,把那個(gè)空的rs.getString("root")打印出來(lái)看下是不是空值.

          上面的人英語(yǔ)太厲害了,是不是中國(guó)人哦.  回復(fù)  更多評(píng)論   

          # re: NullPointerException 錯(cuò)誤耗費(fèi)我一天時(shí)間了 2008-10-03 10:39 隔葉黃鶯

          如果這點(diǎn)基本的除錯(cuò)技能都沒(méi)有,這個(gè)耗你一天,那個(gè)耗你若干天,你還要不要做開(kāi)發(fā)了呢?  回復(fù)  更多評(píng)論   

          # re: NullPointerException 錯(cuò)誤耗費(fèi)我一天時(shí)間了 2008-10-03 10:59 Lvyuanfang

          查看root列的所有值,是不是有null的。首先要搞清楚ResultSet為空,還是rs.getInt() 為空。樓主好好看看,空指針異常都是寫(xiě)代碼不嚴(yán)謹(jǐn)導(dǎo)致。。  回復(fù)  更多評(píng)論   

          # re: NullPointerException 錯(cuò)誤耗費(fèi)我一天時(shí)間了 2008-10-03 12:49 草包書(shū)生

          問(wèn)題還沒(méi)解決:
          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");能執(zhí)行不會(huì)拋出異常,到第二次調(diào)用getString()時(shí)就拋出異常了?
          在第一次調(diào)用sid = rs.getInt("sid");后我用
          if(rs != null){
          out.println("rs is not null");
          }
          結(jié)果為
          rs is not null
          也就是,rs并不為空。
          這是怎么回事?難道是mysql數(shù)據(jù)庫(kù)軟件本身的問(wèn)題?嗎?

            回復(fù)  更多評(píng)論   

          # re: NullPointerException 錯(cuò)誤耗費(fèi)我一天了時(shí)間了,今天又耗了半天了 2008-10-03 12:52 草包書(shū)生

          @隔葉黃鶯
          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");能執(zhí)行不會(huì)拋出異常,到第二次調(diào)用getString()時(shí)就拋出異常了?
          在第一次調(diào)用sid = rs.getInt("sid");后我用
          if(rs != null){
          out.println("rs is not null");
          }
          結(jié)果為
          rs is not null
          也就是,rs并不為空。
          這是怎么回事?難道是mysql數(shù)據(jù)庫(kù)軟件本身的問(wèn)題?嗎?
            回復(fù)  更多評(píng)論   

          # re: NullPointerException 錯(cuò)誤耗費(fèi)我一天了時(shí)間了,今天又耗了半天了 2008-10-03 12:52 草包書(shū)生

          @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");能執(zhí)行不會(huì)拋出異常,到第二次調(diào)用getString()時(shí)就拋出異常了?
          在第一次調(diào)用sid = rs.getInt("sid");后我用
          if(rs != null){
          out.println("rs is not null");
          }
          結(jié)果為
          rs is not null
          也就是,rs并不為空。
          這是怎么回事?難道是mysql數(shù)據(jù)庫(kù)軟件本身的問(wèn)題?嗎?
            回復(fù)  更多評(píng)論   

          # re: NullPointerException 錯(cuò)誤耗費(fèi)我一天了時(shí)間了,今天又耗了半天了 2008-10-03 12:55 草包書(shū)生

          更奇怪的是第一次調(diào)用sid = rs.getInt("sid");能通過(guò)
          馬上第而次sid = rs.getInt("sid");就出現(xiàn)異常了,難道有鬼啊
            回復(fù)  更多評(píng)論   

          # re: NullPointerException 錯(cuò)誤耗費(fèi)我一天了時(shí)間了,今天又耗了半天了 2008-10-03 14:06 草包書(shū)生

          啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊。。。。。。。。。。
          問(wèn)題解決了!原來(lái)是。。。。!多個(gè)ResultSet不能共享同一個(gè)Statement。
          基礎(chǔ)知識(shí)欠缺啊!在jdkAPI中sun公司有沒(méi)說(shuō)明這一點(diǎn)。真是庫(kù)了我。
          還好功夫不負(fù)有心人。謝謝javablog的兄弟了。再次感謝!
          努力,堅(jiān)持就是勝利!

          哎,基礎(chǔ)不扎實(shí)。
          整一個(gè)悲字了得。  回復(fù)  更多評(píng)論   

          # re: NullPointerException 錯(cuò)誤耗費(fèi)我一天了時(shí)間了,今天又耗了半天了 2008-12-30 13:26 北京時(shí)間

          你是說(shuō)把rs對(duì)象的描述輸出來(lái)么?  回復(fù)  更多評(píng)論   


          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

          常用鏈接

          相冊(cè)

          java的相關(guān)連接

          最新評(píng)論

          主站蜘蛛池模板: 新昌县| 千阳县| 贡山| 庄浪县| 梧州市| 望都县| 乌拉特前旗| 玛多县| 岚皋县| 循化| 高青县| 蒙阴县| 盘山县| 汉中市| 临桂县| 海林市| 旺苍县| 都昌县| 合作市| 永州市| 航空| 福鼎市| 赞皇县| 阳信县| 曲周县| 永康市| 秭归县| 雷山县| 峨山| 寻乌县| 浦江县| 永泰县| 赤峰市| 南京市| 化德县| 沙田区| 盘山县| 湾仔区| 乐至县| 济阳县| 镇宁|