关于java.lang.NumberFormatException: null的问题及解决
作者:熬夜分子
这篇文章主要介绍了关于java.lang.NumberFormatException: null的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
java.lang.NumberFormatException: null
不知道大家有没有像我一样常常因为在代码中多加了一个空格或名字写错一个字母,在报错后找半天都找不出来错在哪,叫同事来帮忙解决,找到问题所在后真的想狠狠给自己一巴掌,总是犯这种低级错误,有被无语到~
接下来进入正题
我想点击对应的更新|删除 时跳转到对应的页面,代码如下:
<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>
对应的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转换成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) { //数据库连接、 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) { //数据库连接、 Connection conn = JDBC.getConnection(); Statement state = null; //局部变量没有初始值 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; }
运行结果错误截图
去网上找尝试了各种方法都没能解决,
最后叫来了朋友帮忙看,最后她说这里不能有空格,否则就会报500的错误,
还有我把update写成了updata,然后界面怎么都跳不过去报错,我都服了我自己...
总结
1.大部分时候是类型转化的问题
比如这样转化:
int state = Integer.parseInt(request.getParameter(“state”))
在转换过程中可能存在空格,或者传递url值的时候忘了传递参数,或者传递错误,导致获取到的值为null。
还有一种就是低级错误了,就是mysql·或者你·写的数据库里,有参数是空的,就会导致问题出现得把参数值补上,不能有空缺。
2.解决方法
2.1.在转换之前去空格,Integer.parseInt(numString.trim()) ;
2.2.在转换之前判空串:if(s!=""){转换}
2.3.在转换之前判空:if(s!=null){转换}
在适当的位置添加控制台打印语句,方便检查那一语句出错。
最后,敲代码一定要细心 细心 再耐心呐~~~
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。