Hibernate: insert into t_user (name, age, sex, registerDate) values (?, ?, ?, ?)
org.hibernate.exception.GenericJDBCException: could not insert: [com.sh.model.User]
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:1986)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2405)
at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:37)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:248)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:269)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:167)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:101)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:186)
at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:175)
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:530)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:518)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:514)
at com.sh.dao.UserDAO.save(UserDAO.java:19)
at com.sh.action.UserAction.saveAction(UserAction.java:93)
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)
Caused by: java.sql.SQLException: Incorrect string value: '\xC4\xEA\xBA\xF3' for column 'name' at row 1
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2975)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1600)
at com.mysql.jdbc.ServerPreparedStatement.serverExecute(ServerPreparedStatement.java:1125)
at com.mysql.jdbc.ServerPreparedStatement.executeInternal(ServerPreparedStatement.java:677)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1357)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1274)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1259)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:1968)
... 128 more
Hibernate: select user0_.id as id0_, user0_.name as name0_, user0_.age as age0_, user0_.sex as sex0_, user0_.registerDate as register5_0_ from t_user user0_

解决方案 »

  1.   

    你这是用hibernate动态生成数据库表吧,生成的数据库表默认的是lan1类型,你
    报的错是:不能插入utf-8的字符编码
    解决办法:修改mysql中name字段的字符编码为utf-8
      

  2.   

    Caused by: java.sql.SQLException: Incorrect string value: '\xC4\xEA\xBA\xF3' for column 'name' at row 1
    看看name 的实体类型和数据库类型是否匹配
      

  3.   

    看看name 的实体类型和数据库类型是否匹配或者name给的长度是不是超出了数据库限制
      

  4.   

    可能原因是这些:第一、数据库中的数据字段类型和逻辑中的类型不一致。第二、字段的名字可能写错了,存在手误的可能,比如数据库中存在字段username,你在action中写成了usernname。从Caused by: java.sql.SQLException: Incorrect string value: '\xC4\xEA\xBA\xF3' for column 'name' at row 1这句来看,应该是输入的数据值不正确,那应该还是类型的匹配问题。检查一下数据库中字段的类型,然后看一下你输入的类型。
      

  5.   

    t_user 应该改成你的实体类名
      

  6.   

    数据库的字段的字符编码和sql中的字符编码不兼容引起的
      

  7.   

     insert into t_user (name, age, sex, registerDate) values (?, ?, ?, ?)
    t_user  改成实体名
      

  8.   

    Incorrect string value: '\xC4\xEA\xBA\xF3' for column 'name' at row 1这个问题是字符编码的问题,你肯定输入了一些非凡的字符,varchar不支持一些特殊的符号
    解决方法:
    下载一个commons-lang.jar
    然后插入之前对name做一下转义就行了
    StringEscapeUtils.escapeHtml(bean.getName())
      

  9.   

    bean.setName(StringEscapeUtils.escapeHtml(bean.getName()));
    然后保存这个bean