關(guān)于java.lang.NumberFormatException: null的問(wèn)題及解決
java.lang.NumberFormatException: null
不知道大家有沒(méi)有像我一樣常常因?yàn)樵诖a中多加了一個(gè)空格或名字寫錯(cuò)一個(gè)字母,在報(bào)錯(cuò)后找半天都找不出來(lái)錯(cuò)在哪,叫同事來(lái)幫忙解決,找到問(wèn)題所在后真的想狠狠給自己一巴掌,總是犯這種低級(jí)錯(cuò)誤,有被無(wú)語(yǔ)到~
接下來(lái)進(jìn)入正題
我想點(diǎn)擊對(duì)應(yīng)的更新|刪除 時(shí)跳轉(zhuǎn)到對(duì)應(yīng)的頁(yè)面,代碼如下:
<c:forEach items="${listManager}" var="manager"> <tr class="tr2"> <td>${manager.id}</td> <td>${manager.name}</td> <td>${manager.price}</td> <td>${manager.introduce}</td> <td><a href="<%=path%>/cn/servlet/ManagerServlet?flag = update & m_id =${manager.id}" rel="external nofollow" >更新</a> <a href="<%=path%>/cn/servlet/ManagerServlet? flag =delete & m_id= ${manager.getId()}" rel="external nofollow" >刪除</a> </td> </tr> </c:forEach>
對(duì)應(yīng)的MangerServlet代碼:
if (flag.equals("delete")){ System.out.println("=======delete"+flag); String m_id = req.getParameter("m_id"); System.out.println(m_id); //將String類型的m_id轉(zhuǎn)換成int型 Integer id = Integer.parseInt(m_id.trim()); System.out.println("---id--"+id); ManagerDao managerDao = new ManagerDao(); int m = managerDao.delManager(id); String path = ""; if (m==1){ List<Manager>listManager ; listManager = managerDao.list(); // HttpSession session = req.getSession(); //session.setAttribute("listManager",listManager); req.setAttribute("listManager",listManager); path="/manager/menu.jsp"; }else { path = "/error.jsp"; } RequestDispatcher dispatcher = req.getRequestDispatcher(path); dispatcher.forward(req,resp); }else if (flag.equals("update")){ System.out.println("=======update"+flag); String m_id = req.getParameter("m_id"); System.out.println(m_id); int id = Integer.parseInt(m_id); ManagerDao managerDao = new ManagerDao(); Manager manager = managerDao.getManager(id); req.setAttribute("manager",manager); RequestDispatcher dispatcher = req.getRequestDispatcher("/manager/update.jsp"); dispatcher.forward(req,resp);
ManagerDao層代碼:
public int delManager(int id) { //數(shù)據(jù)庫(kù)連接、 Connection conn = JDBC.getConnection(); Statement state = null; // System.out.println(u); try { state = conn.createStatement(); String sql = "delete from menus where id="+id; System.out.println(sql); m = state.executeUpdate(sql); } catch (SQLException throwables) { throwables.printStackTrace(); } JDBC.close(conn, state,null); return m; } public Manager getManager(int id) { //數(shù)據(jù)庫(kù)連接、 Connection conn = JDBC.getConnection(); Statement state = null; //局部變量沒(méi)有初始值 Manager manager = null; // System.out.println(u); try { state = conn.createStatement(); String sql = "select * from menus where id="+id; ResultSet rs = state.executeQuery(sql); if(rs.next()){ manager = new Manager(); manager.setId(rs.getInt(1)); manager.setName(rs.getString(2)); manager.setPrice(rs.getString(3)); //manager.setPrice(rs.getBigDecimal(3)); manager.setIntroduce(rs.getString(4)); } } catch (SQLException throwables) { throwables.printStackTrace(); } JDBC.close(conn, state,null); return manager; }
運(yùn)行結(jié)果錯(cuò)誤截圖
去網(wǎng)上找嘗試了各種方法都沒(méi)能解決,
最后叫來(lái)了朋友幫忙看,最后她說(shuō)這里不能有空格,否則就會(huì)報(bào)500的錯(cuò)誤,
還有我把update寫成了updata,然后界面怎么都跳不過(guò)去報(bào)錯(cuò),我都服了我自己...
總結(jié)
1.大部分時(shí)候是類型轉(zhuǎn)化的問(wèn)題
比如這樣轉(zhuǎn)化:
int state = Integer.parseInt(request.getParameter(“state”))
在轉(zhuǎn)換過(guò)程中可能存在空格,或者傳遞url值的時(shí)候忘了傳遞參數(shù),或者傳遞錯(cuò)誤,導(dǎo)致獲取到的值為null。
還有一種就是低級(jí)錯(cuò)誤了,就是mysql·或者你·寫的數(shù)據(jù)庫(kù)里,有參數(shù)是空的,就會(huì)導(dǎo)致問(wèn)題出現(xiàn)得把參數(shù)值補(bǔ)上,不能有空缺。
2.解決方法
2.1.在轉(zhuǎn)換之前去空格,Integer.parseInt(numString.trim()) ;
2.2.在轉(zhuǎn)換之前判空串:if(s!=""){轉(zhuǎn)換}
2.3.在轉(zhuǎn)換之前判空:if(s!=null){轉(zhuǎn)換}
在適當(dāng)?shù)奈恢锰砑涌刂婆_(tái)打印語(yǔ)句,方便檢查那一語(yǔ)句出錯(cuò)。
最后,敲代碼一定要細(xì)心 細(xì)心 再耐心吶~~~
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java 動(dòng)態(tài)編譯在項(xiàng)目中的實(shí)踐分享
在 Java 中,動(dòng)態(tài)編譯是指在運(yùn)行時(shí)動(dòng)態(tài)地編譯 Java 源代碼,生成字節(jié)碼,并加載到 JVM 中執(zhí)行,動(dòng)態(tài)編譯可以用于實(shí)現(xiàn)動(dòng)態(tài)代碼生成、動(dòng)態(tài)加載、插件化等功能,本文將給大家分享一下Java 動(dòng)態(tài)編譯在項(xiàng)目中的實(shí)踐,感興趣的同學(xué)跟著小編一起來(lái)看看吧2023-07-07springMVC+jersey實(shí)現(xiàn)跨服務(wù)器文件上傳
這篇文章主要介紹了springMVC+jersey實(shí)現(xiàn)跨服務(wù)器文件上傳,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08RocketMQ消息隊(duì)列實(shí)現(xiàn)隨機(jī)消息發(fā)送當(dāng)做七夕禮物
這篇文章主要為大家介紹了RocketMQ消息隊(duì)列實(shí)現(xiàn)隨機(jī)消息發(fā)送當(dāng)做七夕禮物,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08Java如何處理數(shù)據(jù)成為樹(shù)狀結(jié)構(gòu)
這篇文章主要介紹了Java如何處理數(shù)據(jù)成為樹(shù)狀結(jié)構(gòu)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07springboot啟動(dòng)時(shí)如何獲取端口和項(xiàng)目名
這篇文章主要介紹了springboot啟動(dòng)時(shí)如何獲取端口和項(xiàng)目名,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11詳解Java正則表達(dá)式中Pattern類和Matcher類
java.util.regex是一個(gè)用正則表達(dá)式所訂制的模式來(lái)對(duì)字符串進(jìn)行匹配工作的類庫(kù)包。包括兩個(gè)類Pattern和Matcher Pattern,Pattern是一個(gè)正則表達(dá)式經(jīng)編譯后的表現(xiàn)模式。Matcher對(duì)象是一個(gè)狀態(tài)機(jī)器,它依據(jù)Pattern對(duì)象做為匹配模式對(duì)字符串展開(kāi)匹配檢查。2016-12-12Java實(shí)現(xiàn)PDF轉(zhuǎn)Word的示例代碼(無(wú)水印無(wú)頁(yè)數(shù)限制)
這篇文章主要為大家詳細(xì)介紹了如何利用Java語(yǔ)言實(shí)現(xiàn)PDF轉(zhuǎn)Word文件的效果,并可以無(wú)水印、無(wú)頁(yè)數(shù)限制。文中的示例代碼講解詳細(xì),需要的可以參考一下2022-05-05@Valid和@Validated注解校驗(yàn)以及異常處理方式
在Javaweb開(kāi)發(fā)中,防止數(shù)據(jù)庫(kù)惡意攻擊是至關(guān)重要的,盡管前端校驗(yàn)可以起到一定的篩選作用,但通過(guò)工具如postman直接對(duì)后端發(fā)起請(qǐng)求的情況仍然需要后端進(jìn)行嚴(yán)格的數(shù)據(jù)校驗(yàn),Java生態(tài)下,@Valid注解配合SpringBoot提供了一個(gè)便捷高效的后端數(shù)據(jù)校驗(yàn)方案2024-11-11