INSERT INTO user(name,pass,role,realName,gender,age,phone,email,address,registerTime)VALUES(?,?,?,?,?,?,?,?,?,?)
java.sql.SQLException: Field 'id' doesn't have a default value
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2002)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2163)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2624)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2127)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2427)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2345)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2330)
at com.bsw.user.UserDAO.insertUser(UserDAO.java:161)
at com.bsw.servlet.common.RegisterControl.doPost(RegisterControl.java:108)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:667)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Unknown Source)  用户注册或者信息的id应该怎么设置成自动生成的???

解决方案 »

  1.   

    实体的那个地方有设置@GenericGenerator(name = "generator", strategy = "uuid.hex")
    @Id
    @GeneratedValue(generator = "generator")
    @Column(name = "USERID", unique = true, nullable = false, length = 32)
    public String getUserid() {
    return this.userid;
    } public void setUserid(String userid) {
    this.userid = userid;
    }
      

  2.   

    这个语句需要增加10个id    加10个value然后一起执行。你给了吗?
      

  3.   

      刚刚学习的java,可不可以给出完成的解决代码?
        个人认为这个问题是id没有设置默认值并增长的值,但是我不晓得怎么解决这个问题··
       
      

  4.   

     id int not null auto_increment primary key
      

  5.   

    你没有设置ID。你在数据库中并没有设置让数据库代理来生成ID 。你必须手动指定ID。
      

  6.   

    刚在你另一个帖子里回复了,你去看看,序列senquence ,就是在数据库自己去建一个senquence,给一个初始值,每次需要增长的大小,然后在你想配置文件id属性的位置应用你建的sequence,跟建表差不多,呵呵,自己查一下吧,加深点影响!
      

  7.   

    列子:
    -- Create sequence 
    create sequence SEQ_PROBE
    minvalue 1
    maxvalue 9999999999999999999999999999
    start with 2000
    increment by 1
    cache 20;
      

  8.   

       数据库脚本更改了·
    create table user(
    id int(4) not null  AUTO_INCREMENT,
    name varchar(20) not null,
    pass varchar(20) not null,
    role int(1) not null,
    realName varchar(20),
    gender varchar(2),
    age int(3) ,
    phone varchar(11),
    email varchar(32),
    address varchar(32),
    postcode varchar(6),
    registerTime varchar(20),
    primary key(id)
    )ENGINE=InnoDB DEFAULT CHARSET=gb2312;
     但是现在又出现另一个问题·
    insert into user(name,pass,role,realName,gender,age,phone,email,address,registerTime)VALUES(?,?,?,?,?,?,?,?,?,?)
    com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Column 'name' cannot be null
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1036)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2002)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2163)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2624)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2127)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2427)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2345)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2330)
    at com.bsw.user.UserDAO.insertUser(UserDAO.java:164)
    at com.bsw.servlet.common.RegisterControl.doPost(RegisterControl.java:108)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:667)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
    at java.lang.Thread.run(Unknown Source)
    com.bsw.user.User@fffa61
      

  9.   

    字段name的值不为空,你数据库是这样设计的,你看你程序插入数据库时name是不是有值的,如果你页面name填写的正确的话就检查一下对应的值是否传递到后台了。这个应该不难解决。
      

  10.   

    SQL语句  中  往  name字段插入的值为  空
      

  11.   

     name 跟其他数据一样是插入了值的··  public boolean insertUser(User user) { connection = DBManager.getConnection(); // 得到数据库连接 StringBuffer sqlState = new StringBuffer();


    sqlState.append("insert into user(name,pass,role,");
    //sqlState.append("insert into user(name,pass,role,");
    sqlState.append("realName,gender,age,phone,email,address,registerTime");
        sqlState.append(")VALUES(?,?,?,?,?,?,?,?,?,?)");
    //sqlState.append(")VALUES(?,?,?,?,?,?,?,?,?,?,?)");
    System.out.println(sqlState);
    try { preState = connection.prepareStatement(sqlState.toString()); // 采用预处理方式 preState.setString(1, user.getName()); // 设置每个要插入的的属性
    preState.setString(2, user.getPass());
    preState.setInt(3, user.getRole());
    preState.setString(4, user.getRealName());
    preState.setString(5, user.getGender());
    preState.setInt(6, user.getAge());
    preState.setString(7, user.getPhone());
    preState.setString(8, user.getEmail());
    preState.setString(9, user.getAddress());
    preState.setDate(10, user.getRegisterTime());

    // preState.execute("begin"); // 事务开始
    preState.executeUpdate();
    // preState.execute("commit"); // 提交插入操作
    return true;
    } catch (SQLException e) { /*try {
    preState.execute("rollback"); // 回滚
    } catch (SQLException e1) {
    e1.printStackTrace();
    }*/
    e.printStackTrace();
    return false;
    } finally {
    DBManager.closeAll(connection, preState, resultSet);
    }
    }
      

  12.   

    那你先把脚本 name字段改成可以为空,看看到底哪里错了。
      

  13.   

    我之前自己改了哈·
      控制台就出现这种
          insert into user(name,pass,role,realName,gender,age,phone,email,address,registerTime)VALUES(?,?,?,?,?,?,?,?,?,?)
    null
       个人认为是页面传值的问题
         取不到注册的值?
          是啥子原因安?
      

  14.   

    drop table user;
    create table user(
    id int(4) not null AUTO_INCREMENT,
    name varchar(20) ,
    pass varchar(20) ,
    role int(1) ,
    realName varchar(20),
    gender varchar(2),
    age int(3) ,
    phone varchar(11),
    email varchar(32),
    address varchar(32),
    postcode varchar(6),
    registerTime varchar(20),
    primary key(id)
    )ENGINE=InnoDB DEFAULT CHARSET=gb2312;好了,你把上面这句话在数据库中执行一下。
      

  15.   

    那要看你用的什么,是servlet?还是struts框架?如果是框架的话,表单里,标签的name属性要和你对象.属性名如:name = "user.username";还有就是action一定要给get和set方法
    如果你是用的servlet的话,取request.getParameter("username");
    这里最好你在控制台输出一下,看是否有取到值.
      

  16.   

    哈哈 好久没有来了,这个问题是数据库设计的问题,不归JAVA