今天写了一个保存数据的方法(注册)报错提示为:[12:47:06] ERROR util.JDBCExceptionReporter "[Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]无法将 NULL 值插入列 'USER_CD',表 'cattle.dbo.UserInfo';该列不允许空值。INSERT 失败。"
[12:47:06] ERROR util.JDBCExceptionReporter "[Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]语句已终止。"
2011-11-4 12:47:06 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet action threw exception
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]无法将 NULL 值插入列 'USER_CD',表 'cattle.dbo.UserInfo';该列不允许空值。INSERT 失败。
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processErrorToken(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReplyToken(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRPCRequest.processReplyToken(Unknown Source)
at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReply(Unknown Source)
at com.microsoft.jdbc.sqlserver.SQLServerImplStatement.getNextResultType(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.commonTransitionToState(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.postImplExecute(Unknown Source)
at com.microsoft.jdbc.base.BasePreparedStatement.postImplExecute(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.commonExecute(Unknown Source)
at com.microsoft.jdbc.base.BaseStatement.executeInternal(Unknown Source)
at com.microsoft.jdbc.base.BasePreparedStatement.execute(Unknown Source)
at org.apache.commons.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:168)
at org.hibernate.id.IdentityGenerator$InsertSelectDelegate.executeAndExtract(IdentityGenerator.java:108)
at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:33)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2158)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2638)
at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:48)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:250)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:298)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187)
at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172)
at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:519)
at org.springframework.orm.hibernate3.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:625)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:362)
at org.springframework.orm.hibernate3.HibernateTemplate.save(HibernateTemplate.java:622)
at com.commcon.daoImpl.IJDBCDaoImpl.create(IJDBCDaoImpl.java:236)
at com.cattle.daoImpl.UserInfoDaoIMPL_ss.saveUser(UserInfoDaoIMPL_ss.java:24)
at com.cattle.serice.UserInfoService_ss.saveUser(UserInfoService_ss.java:37)
at com.cattle.struts.action.UserInfoAction.register(UserInfoAction.java:152)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:274)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:194)
at org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:106)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
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:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.commcon.Filter.FilterEncode.doFilter(FilterEncode.java:42)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
走断点也走了报错的字段确实有值 就是差不进去
 

解决方案 »

  1.   

    代码:public ActionForward register(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response)
    throws FileNotFoundException, IOException {
    UserInfoForm userInfoForm = (UserInfoForm) form;
    PrintWriter out = response.getWriter(); // 创建输出对象
    // 获取用户输入的数据
    String userName = request.getParameter("userName");
    String pwd = request.getParameter("pwd");
    String sex =request.getParameter("sex");
    String Email = request.getParameter("Email");
    String wenti = request.getParameter("wenti");
    String answer = request.getParameter("huida"); 
    String birthday = request.getParameter("birthday");
    String provinceCd = request.getParameter("questionMaster");
    String cityCd = request.getParameter("city");
    String phone = request.getParameter("phone");
    String comment = request.getParameter("zwjs"); // 注释 (自我介绍)
    FormFile photoImagePath = userInfoForm.getPhotoPath(); // 获取图片
    if (photoImagePath.getFileSize() != 0) {
    HttpSession session = request.getSession();
    String FileImageName = photoImagePath.getFileName();// 图片名称
    int size = photoImagePath.getFileSize();// 图片大小
    String contentType = photoImagePath.getContentType();// 图片类型
    byte[] date = photoImagePath.getFileData();// 上传内容
    int lastLength = FileImageName.lastIndexOf("."); // 重命名上传的图片名称
    String fileType = FileImageName.substring(lastLength); // 获取上传图片的类型
    String fileUpLoadPath = this.getServlet().getServletContext()
    .getRealPath("/UserphotoPath/");// 获取系统路径 存放用户头像图片路径
    String userPhoto = userName + fileType; // 重命名用户头像图片用用户的名称命名
    File file = new File(fileUpLoadPath); // 判断用户头像文件夹是否存在,不存在则创建一个新的文件名称为"UserphotoPath"
    if (!file.exists()) {
    file.mkdir();
    }
    session.setAttribute("fileImageName", FileImageName);
    session.setAttribute("contentType", contentType);
    session.setAttribute("size", size);
    FileOutputStream fo = new FileOutputStream(fileUpLoadPath + "/"
    + userPhoto); // 将要保存的地址
    fo.write(date);
    fo.close();
    // 重命名后的文件名称:" + userPhoto
    // "文件保存路径:" + fileUpLoadPath + FileImageName
    // 获得系统时间(替换用户CD)
    Date date2 = new Date(System.currentTimeMillis());
    String userCd = new SimpleDateFormat("MMddhhmmss").format(date2); UserInfo user = new UserInfo(); // 实例化用户对象实体类
    Password password = new Password(); // 实例化用户对象密码实体类
    SafeQuestion safeQuestion = new SafeQuestion(); // 实例化安全问题实体类 user.setUserName(userName); // 将用户输入的数据封装到用户实体类中
    user.setUserCd(Integer.parseInt(userCd));
    user.setSex(sex);
    user.setEmail(Email);
    user.setBirthday(birthday);
    user.setProvinceCd(Integer.parseInt(provinceCd));
    user.setCityCd(Integer.parseInt(cityCd));
    user.setScore(0); // 积分
    user.setPhotoPath(userPhoto);
    user.setRoleCd(2);  //用户角色CODE 0:高级管理员 1:管理员 2:普通用户
    user.setComment(comment);
    user.setRegistDate(java.util.GregorianCalendar.getInstance()
    .getTime());
    // 将用户输入的数据封装到密码实体类中
    password.setUserCd(Integer.parseInt(userCd));
    password.setPassword(pwd);
    // 将用户输入的数据封装到安全问题实体类中
    safeQuestion.setUserCd(Integer.parseInt(userCd));
    safeQuestion.setAnswer(answer); // 安全问题答案
    safeQuestion.setQuestionCd(Integer.parseInt(wenti)); // 安全问题cd
    // 开始保存数据到各个表中(涉及的表有:PASSWORD、SAFE_QUESTION、UserInfo)
    boolean isFlagUserInfo = userInfoMananger_ss.saveUser(user);
    boolean isFlagPassword = passwordMananger.savePassword(password);
    boolean isFlagSafeQuestion = safeQuestionManager
    .savesafeQuestion(safeQuestion);
    if (isFlagPassword == true && isFlagSafeQuestion == true
    && isFlagUserInfo == true) {
    out
    .print("<script>window.alert('用户保存成功');window.history.bock();</script>");
    out.flush();
    out.close();
    } else {
    out
    .print("<script>window.alert('用户保存失败');window.history.bock();</script>");
    out.flush();
    out.close();
    }
    }
    return null;
    }
      

  2.   

    报错不是说你的USER_CD字段插入NULL了user.setUserCd(Integer.parseInt(userCd));
    这里如果你的userCd确实有值的话,,那你看你hibernate的映射文件中。配置的属性和列的配置是否正确。。如表的列名是否正确
      

  3.   


    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <!-- 
        Mapping file autogenerated by MyEclipse Persistence Tools
    -->
    <hibernate-mapping>
        <class name="com.cattle.entity.UserInfo" table="UserInfo" schema="dbo" catalog="cattle">
            <id name="userCd" type="java.lang.Integer">
                <column name="USER_CD" />
                <generator class="identity" />
            </id>
            <property name="userName" type="java.lang.String">
                <column name="USER_NAME" length="20" not-null="true" />
            </property>
            <property name="roleCd" type="java.lang.Integer">
                <column name="ROLE_CD" not-null="true" />
            </property>
            <property name="sex" type="java.lang.String">
                <column name="SEX" length="4" not-null="true" />
            </property>
            <property name="photoPath" type="java.lang.String">
                <column name="PHOTO_PATH" length="100" />
            </property>
            <property name="birthday" type="java.lang.String">
                <column name="BIRTHDAY" length="50" />
            </property>
            <property name="provinceCd" type="java.lang.Integer">
                <column name="PROVINCE_CD" />
            </property>
            <property name="cityCd" type="java.lang.Integer">
                <column name="CITY_CD" />
            </property>
            <property name="email" type="java.lang.String">
                <column name="EMAIL" length="40" />
            </property>
            <property name="score" type="java.lang.Integer">
                <column name="SCORE" />
            </property>
            <property name="lastLoginDate" type="java.util.Date">
                <column name="LAST_LOGIN_DATE" length="23" />
            </property>
            <property name="registDate" type="java.util.Date">
                <column name="REGIST_DATE" length="23" />
            </property>
            <property name="comment" type="java.lang.String">
                <column name="COMMENT" length="200" />
            </property>
        </class>
    </hibernate-mapping>这是hibernate映射文件 系统生成的。应该没有问题吧。。
      

  4.   

    配置文件中。。你的USER_CD字段配置了自增的那你的实体中UserCd属性应该不设置值了。。
      

  5.   

     <generator class="assigned" />
      

  6.   

    <generator class="identity" />是对的,save的那个对象,主键设置null进去就行。
    此外建表的时候,要 id int identity(1,1) primary key,