代码如下,在执行到 stmt.executeUpdate()的时候报错public class UserOperation extends Action{
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
GdzczjForm searchForm = (GdzczjForm) form;

String czry_dm=searchForm.getczry_dm();
String sjjkxybz=searchForm.getsjjkxybz();
String sjjkqx=searchForm.getsjjkqx();
String pwd=searchForm.getpwd();

Connection conn = null;                       //定义连接
String sql = null;                            //定义SQL语句
PreparedStatement stmt=null;
try {
conn = Database.getConn();                 //得到连接

sql = "update dm_czry set sjjkxybz=?,sjjkqx=?,sjjkpwd=? where czry_dm=?"; stmt = conn.prepareStatement(sql); stmt.setString(1,sjjkxybz);
stmt.setString(2,sjjkqx);
stmt.setString(3,pwd);
stmt.setString(4,czry_dm);

stmt.executeUpdate();//运行到这里就出错了
        stmt.close();
} catch(SQLException e) {
e.printStackTrace();
return mapping.findForward("faild");
} finally{
if(stmt!=null) try{stmt.close();}
       catch(SQLException ignore){}
if(conn!=null) try{conn.close();}
       catch(SQLException ignore){}       
       
    }
return mapping.findForward("success");
}
}错误提示如下Error 500--Internal Server Error 
java.lang.NullPointerException
at jsp_servlet.__useroperation._jspService(__useroperation.java:190)
at weblogic.servlet.jsp.JspBase.service(JspBase.java:33)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1006)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:419)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:315)
at weblogic.servlet.internal.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:322)
at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1063)
at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:386)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:229)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1006)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:419)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:315)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6718)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3764)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2644)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:219)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:178)请各位大虾帮我看看,谢谢了

解决方案 »

  1.   

    把stmt.executeUpdate();之後的stmt.close()刪掉試試
    你不是在finally中有colse了嗎
      

  2.   

    如果還不行
    就換成這一段:
    stmt= conn.prepareStmt(sql);
    conn.setCurrentPrepareStmt(stmt);
    stmt.clearParameters();
    stmt.setString(1,sjjkxybz);
    stmt.setString(2,sjjkqx);
    stmt.setString(3,pwd);
    stmt.setString(4,czry_dm);
    conn.prepareUpdate();
      

  3.   

    我也想过是不是setString()传进去的几个参数有空值,但在debug界面看了,那几个参数也都不为空。
      

  4.   

    如果上面那段還有問題,那你真要把那4個字段的值打出來看看了。。
    有為null的值也說不定
      

  5.   

    conn.setCurrentPrepareStmt(stmt);
    conn.prepareUpdate();这两个方法没有啊
      

  6.   

    1.4有PreparedStatment這個接口的
    怪了
      

  7.   

    我修改了下代码,把执行sql语句的那段去掉,让action把4个参数传到下个页面并打印出来,结果4个参数都正常打印了,没有为空的。那还是在执行这段和sql语句有关的部分出了问题。
      

  8.   

    是不是一定要有个值传到下个页面啊
    我刚刚修改代码的时候,仅仅去掉sql语句相关部分,同样提示java.lang.NullPointerException,但是加了request.setAttribute()把参数放到request里面后,就执行过去了。
      

  9.   

    用回你原來的做法,把剛才取到的值放回查詢分析器裡檢查一下
    那條update的SQL是否執行正常
      

  10.   

    把你的
    stmt = conn.prepareStatement(sql);
    換成
    stmt = conn.prepareStmt(Sql);
    stmt.clearParameters();
    再試試
    再不行的話,俺的水平就隻能幫到這裡了
      

  11.   

    stmt = conn.prepareStmt(Sql);
    没有这个方法啊我直接在查询分析器里执行了sql语句update dm_czry set sjjkxybz= Y,sjjkqx= 01,sjjkpwd= 11111 where czry_dm= 00001
    发现一个问题 sjjkxybz= Y 这个被整个认为是个字段名称,写成sjjkxybz= 'Y'才可以执行,
    然后我尝试在action中把sjjkxybz这个变量直接变成'Y',执行的时候,页面下方出现进度条,然后长时间的停在提交页面。我又尝试把 sjjkxybz 变量设置成 1,在查询分析器里执行sql语句
    update dm_czry set sjjkxybz= 1,sjjkqx= 01,sjjkpwd= 11111 where czry_dm= 00001
    执行通过,但是在页面执行的时候,同样是停在提交页面不动....这是为什么呢?
      

  12.   

    卡在页面的问题已经解决了,那是因为没有获得操作那个表的锁。现在sql语句可以执行过去,页面提交action后直接到数据库里面查,数据已经被修改了
    但是在页面上仍然会提示  java.lang.NullPointerException这个错误,到底是为什么呢?
      

  13.   

    stmt.executeUpdate();的下一句就是catch异常呀
    stmt.executeUpdate();应该是已经执行了,因为数据库里面的内容已经改变,
    这样还可以单步跟踪么.我刚刚开始搞这个,单步跟踪里面的东西,看不太懂诶..
      

  14.   

    Error 500--Internal Server Error 
    java.lang.NullPointerException
    at jsp_servlet.__useroperation._jspService(__useroperation.java:190)
    服务器内部错误,看看JSP页面是不是有问题
      

  15.   

    啊!确实是的,我返回的页面有个request.getParameter().
    卡了两天了呀,楼上这一提醒,突然一下想通了,我开始考虑页面问题的时候,仅仅考虑到提交页面,真是太感谢了呀~~~.