首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

求教!修改表单信息某一列值出现NullPointerException报错,该怎么解决

2013-09-11 
求教!修改表单信息某一列值出现NullPointerException报错这是报错内容:org.apache.jasper.JasperException

求教!修改表单信息某一列值出现NullPointerException报错
这是报错内容:
org.apache.jasper.JasperException: An exception occurred processing JSP page /update_cooperations.jsp at line 47

44: <input type="hidden" name="p_number" value="<%=rs_1.getString("number")%>" /> <% }else {%>
45: <input type="hidden" name="p_number" value=" " /> <%} %></th>
46: <th scope="col">
47: <input type="text" name="suppliername" value="<%=rs.getString("suppliername")%>" />
48: &nbsp;
49: <% String sql_2="select ICP from supplier where material ='"+request.getParameter("material")+"' and name = '"+request.getParameter("suppliername")+"'";
50: ResultSet rs_2 = statement.executeQuery(sql_2);%>


Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:515)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:426)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
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.ResultSet.findColumn(ResultSet.java:966)
com.mysql.jdbc.ResultSet.getString(ResultSet.java:5584)
org.apache.jsp.update_005fcooperations_jsp._jspService(update_005fcooperations_jsp.java:122)
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:384)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

这是我的源代码(菜鸟,莫见笑~!):
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head>

<body>
<%
Class.forName("com.mysql.jdbc.Driver").newInstance();
String url= "jdbc:mysql://localhost:3306/graduationproject?user=root&password=123&useUnicode=true&characterEncoding=GB2312";
Connection connection=DriverManager.getConnection(url); 
Statement statement = connection.createStatement();
String number=request.getParameter("number");
String sql="select * from cooperations where number='"+number+"'";
ResultSet rs = statement.executeQuery(sql);
while(rs.next()) {
%>
<form id="form1" name="form1" method="post" action="deal_update_cooperation.jsp">
  <table width="200">
  <tr>
  <th scope="col"> 起始时间</th>
  <th scope="col">结束时间</th>
  <th scope="col">物料</th>
  <th scope="col"> 项目名称</th>
  <th scope="col"> 供应商名称</th>
  <th scope="col">合作价格</th>
  <th scope="col"><input type="submit" name="Submit" value="保存" /></th>
  </tr>


  <tr>
  <th scope="col"><input type="hidden" name="number" value="<%=request.getParameter("number")%>"/>
  <input type="text" name="begintime" value="<%=rs.getTime("begintime")%>" />
  &nbsp;</a></th>
  <th scope="col"><input type="text" name="endtime" value="<%=rs.getTime("endtime")%>" />
  &nbsp;</th>
  <th scope="col"><input type="text" name="material" value="<%=rs.getString("material")%>" />
  &nbsp;</th>
  <th scope="col"><input type="text" name="project" value="<%=rs.getString("projectname")%>" />
  &nbsp;
  <% String sql_1="select number from project where material ='"+request.getParameter("material")+"' and name = '"+request.getParameter("projectname")+"'";
ResultSet rs_1 = statement.executeQuery(sql_1);%>
<% if(rs_1.next()){ %>
  <input type="hidden" name="p_number" value="<%=rs_1.getString("number")%>" /> <% }else {%>
  <input type="hidden" name="p_number" value=" " /> <%} %></th>
  <th scope="col">
  <input type="text" name="suppliername" value="<%=rs.getString("suppliername")%>" />
  &nbsp;
  <% String sql_2="select ICP from supplier where material ='"+request.getParameter("material")+"' and name = '"+request.getParameter("suppliername")+"'";
ResultSet rs_2 = statement.executeQuery(sql_2);%>
<% if(rs_2.next()){ %>
  <input type="hidden" name="ICP" value="<%=rs_2.getString("ICP")%>" /><% }else {%>
  <input type="hidden" name="ICP" value=" " /><%} %></th>
  <th scope="col"><input type="text" name="price" value="<%=rs.getInt("price")%>" />
  &nbsp;</th>
  <th scope="col">&nbsp;
  <input type="reset" name="Submit2" value="重写" /></th>
  </tr>
  </table>
</form>
<p>
  <% } %>
</p>
<p><a href="cooperation_management.jsp">返回</a></p>
</body>
</html>
我看过NullPointerException报错的一些处理方法,基本上都说是因为null而导致的,要作一个非null的判断处理,但我不是很明白前面有做rs.next()判断啊,为什么就只有这一行有问题呢?数据库已经将所有verchar类型的设置为默认empty string,是否有帮助?这里要如何处理?如果一定要判断非null,判断哪个值啊?

[解决办法]
楼主的form表单是不是应该在循环外边
[解决办法]
首先建议你将java代码和页面分离开来,可以使用jstl标签或者struts2标签,都很好用。我不知道你为什么要用三个next。是需要嵌套么、?如果不是,那怎么没有结束的}标签。如果是嵌套,那位什么就只有一个}标签?不是应该有3个?
[解决办法]

探讨
楼主的form表单是不是应该在循环外边

我的异常网推荐解决方案:An exception occurred processing JSP page,http://www.myexception.cn/j2se/33144.html

热点排行