public void setUserInfo(UserInfo userInfo)
{
this.userInfo=userInfo;
}
你的参数一定是被初始化过的么??pstmt.setString(1,userInfo.getUsername());
pstmt.setString(2,userInfo.getPassword());
pstmt.setString(3,userInfo.getPhone());
pstmt.setString(4,userInfo.getEmail());
在调用userInfo的一系列get方法之前,是否要判断一下userInfo是否为null
空指针又可能就出在这里
由于你的参数为null导致this.userInfo初始化为null,然后调用this.userInfo的get方法,抛出空指针异常~~~

解决方案 »

  1.   

    多谢楼上的!那应该如何修改呢?还有一个页面adduser.jsp忘了贴出,这里是否也有问题?:<%@ page language="java"  import="regist.*"%> <jsp:useBean id="userInfo" class="regist.UserInfo" scope="page">
    <jsp:setProperty name="userInfo" property="*"/>
    </jsp:useBean>
    <jsp:useBean id="regist" class="regist.UserRegist" scope="page"/>
    <html>
    <head>
    <title>用户信息注册页面</title>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    </head>
    <body>
    <%  regist.setUserInfo(userInfo);
      regist.regist();
      out.println("注册成功");
    %>
    <br>
    <a href="main.jsp">返回</a>
    </body>
    </html>
      

  2.   


    要做注册,首先你要判断数据库是否有此用户或ID,以免数据存储冲突,
    同时存的时候,要再次判断非空值是否出现空值的情况,尽量不要出现问题,写入操作不如 直接把插入字段写到string 中直接执行更新如strSQL= "insert into tablename (字段列表) values("+ 字段值列表+")"
      stmt.exceuteUpdate(strSQL);
    //不要一个一个的插入,看看行不行 ;
      

  3.   

    public void regist()throws Exception
    {
    String reg="insert into users values (?,?,?,?,?)";
    //不知道,这个users表有几个元素,你该指明值是赋给哪个元素的。;你这里有5项,而下面你只赋值4项。
    try
    {
    PreparedStatement pstmt=con.prepareStatement(reg); pstmt.setString(1,userInfo.getUsername());
    pstmt.setString(2,userInfo.getPassword());
    pstmt.setString(3,userInfo.getPhone());
    pstmt.setString(4,userInfo.getEmail()); //执行更新操作
    pstmt.executeUpdate();
    }
    catch(Exception e)
    {
    e.printStackTrace();
    throw e;
    }
    }
      

  4.   

    leniz(leniz):你说的很对,我在JSP中有对输入有效性进行验证,至于数据库中ID是否已存在,我想先把目前的问题解决再去考虑它。另外谢谢你的写入操作的建议!!
      

  5.   

    看看,conn对象在操作的时候,是不是null?
      

  6.   

    好像这句的报的错
    PreparedStatement pstmt=con.prepareStatement(reg);
    那说明con是null
    多半是数据库连接问题
      

  7.   

    另外String reg="insert into users values (?,?,?,?,?)";
    有5个问号
    后面怎么才四个setString
      

  8.   

    哦,原先还有一个setString是用来加入注册日期的,后来为了简单去掉了,嘿嘿
      

  9.   

    建议类UserRegist的构造函数修改如下
    public UserRegist() throws Exception
    {
    String DBDriver="org.gjt.mm.mysql.Driver"; 
    String url="jdbc:mysql://localhost:8080;DatabaseName=regist";
    String USER="root";
    String PWD="19820213"; try
    {
    Class.forName(DBDriver); 
    con=DriverManager.getConnection(url,USER,PWD);
    }
    catch(Exception e) 
    {
    e.printStackTrace();
                               throw(new Exception("Database connecting failed!")); }
    }
      

  10.   

    zebra007(呼呼):我修改之后错误信息变成这样了,难道是数据库连接的问题吗?exception javax.servlet.ServletException: class regist.UserRegist : java.lang.Exception: Database connecting failed!
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:673)
    org.apache.jsp.adduser_jsp._jspService(adduser_jsp.java:99)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:133)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
    root cause java.lang.InstantiationException: class regist.UserRegist : java.lang.Exception: Database connecting failed!
    org.apache.jsp.adduser_jsp._jspService(adduser_jsp.java:67)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:133)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
      

  11.   

    看来问题就出在UserRegist的构造函数里面了?
      

  12.   

    url="jdbc:mysql://localhost:8080;DatabaseName=regist";
    你的mysql端口号是8080?
      

  13.   

    好像格式也不对,try
    url="jdbc:mysql://127.0.0.1/regist?useUnicode=true&characterEncoding=GBK"
      

  14.   

    zebra007(呼呼) :谢谢,端口是搞错了,现在修改成:
    url="jdbc:mysql://localhost:3306/regist";错误变成这样了:
    java.sql.SQLException: Invalid argument value: Duplicate entry '0' for key 1
    这又是什么问题呢?
      

  15.   

    This means that you are trying to insert a value into a column that is either the primary key for the table, or has a unique key defined, and the value already exists. What does your table structure look like?
      

  16.   

    laughsmile(海边的星空):我的表users结构如下:Field        Type           Null      Key
    ---------------------------------------------
    username     varchar(12)              PRI
    password     varchar(12)    yes
    phone        varchar(20)    yes
    email        varchar(30)    yes请问有否不妥?
      

  17.   

    我认为楼主可能忽视了一个问题:
    JSP文件(regi.jsp)中:
    <%
      String username = request.getParameter("username");==》你肯定这个参数获得了吗?
      if ( username == null ) {
        username = "";
      }
      String password = request.getParameter("password");
      if( password == null ) {
      password = "";
      }
      String email = request.getParameter("email");
      if ( email == null ) {
        email = "";
      }
      String phone = request.getParameter("phone");
      if ( phone == null ) {
        phone = "";
      } 
    %>
      

  18.   

    henbane(henbane):我确定测试的时候4个表单项都是非空的,不知道你指的是这个吗,或者是另有所指?多谢!
      

  19.   

    java.sql.SQLException: Invalid argument value: Duplicate entry '0' for key 1
    从字面上理解应该是对“key 1”重复输入了"0"?这里的"key 1"指的是什么呢?“0”又是怎么回事?
      

  20.   

    搂住的数据库里有用过sequence吗?会不会是sequence问题?
      

  21.   

    首先你5个问号改成4个了 吧
    另外你的username是主键
    如果表中已经有一个username='0'的表项,那么就不能再添加这个username的表项了
      

  22.   

    zebra007(呼呼):谢谢提醒!原来表里面果然有一项记录,username=0,其他的都是null值,是原先SQL语句没写对时插入进去的。现在把它删除以后终于搞定了!马上结帖!多谢各位大虾相助!!!