Error attempting to get column 'e_gender' from result set

今天在使用mybatis查询时遇到报错

Error attempting to get column ‘e_gender‘ from result set.  Cause: java.sql.SQLException: Cannot convert value ‘男‘ from column 3 to TIMESTAMP.
; Cannot convert value ‘男‘ from column 3 to TIMESTAMP.; nested exception is java.sql.SQLException: Cannot convert value ‘男‘ from column 3 to TIMESTAMP.

在网上查了很多解决办法,大多都是说是数据库字段类型与实体类的属性类型的定义不一致的原因,但是请看:

<resultMap type="com.xyw.hospital.model.entity.Employee" id="BaseMap">
        <result property="eId" column="e_id" jdbcType="INTEGER"/>
        <result property="eName" column="e_name" jdbcType="VARCHAR"/>
        <result property="eGender" column="e_gender" jdbcType="VARCHAR"/>
        <result property="eBirthday" column="e_birthday" jdbcType="TIMESTAMP"/>
        <result property="eDid" column="e_did" jdbcType="INTEGER"/>
        <result property="eRoleid" column="e_roleid" jdbcType="INTEGER"/>
        <result property="eTel" column="e_tel" jdbcType="VARCHAR"/>
        <result property="eVprice" column="e_vprice" jdbcType="NUMERIC"/>
        <result property="eState" column="e_state" jdbcType="INTEGER"/>
        <result property="eCreateTime" column="e_create_time" jdbcType="TIMESTAMP"/>
        <result property="eClossTime" column="e_closs_time" jdbcType="TIMESTAMP"/>
    </resultMap>

    <sql id="items">
        e_id, e_name, e_gender, e_birthday, e_did, e_roleid, e_tel, e_vprice, e_state, e_create_time, e_closs_time    </sql>
    <!--查询单个-->
    <select id="queryById" resultMap="BaseMap">
        select
          <include refid="items"/>
        from employee
            where e_id = #{eId}
    </select>
CREATE TABLE `employee` (
  `e_id` int(11) NOT NULL AUTO_INCREMENT,
  `e_name` varchar(25) DEFAULT NULL,
  `e_gender` varchar(4) DEFAULT NULL COMMENT ‘‘‘男‘‘或‘‘女‘‘‘,
  `e_birthday` date DEFAULT NULL,
  `e_did` int(11) DEFAULT NULL,
  `e_roleid` int(11) DEFAULT NULL,
  `e_tel` varchar(15) DEFAULT NULL,
  `e_vprice` decimal(10,2) DEFAULT NULL,
  `e_state` int(1) DEFAULT ‘0‘ COMMENT ‘0 新注册(默认) 1 在职 2离职‘,
  `e_create_time` date DEFAULT NULL,
  `e_closs_time` date DEFAULT NULL,
  PRIMARY KEY (`e_id`) USING BTREE,
  KEY `idx_did` (`e_did`) USING BTREE,
  KEY `idx_roleid` (`e_roleid`) USING BTREE,
  KEY `idx_state` (`e_state`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
	protected Integer eId;
    protected String eName;
    protected String eGender;
    protected Date eBirthday;
    protected Integer eDid;
    protected Integer eRoleid;
    protected String eTel;
    protected Double eVprice;
    protected Integer eState;
    protected Date eCreateTime;
    protected Date eClossTime;

    public Employee(String eName, String eGender, Date eBirthday, String eTel, Integer eDid, Integer eRoleid, Double eVprice) {
        //略
    }

可以看到字段定义一致,导致一致我一直不得其解。

这个地方真正的原因是什么呢?

大家也许已经看到了,我这里有个构造方法,其中省去了一个字段,导致查到的数据多余构造方法中的数据,使得其将e_id->eName,e_name->eGender,e_gender->eBirthday,这里因为e_gender是vchar,而eBirthday是date类型,导致的类型转换失败。

这里又回到类型问题了,关于类型转换的问题这里不详说。但是大家记得在定义数据库字段与实体类字段的类型一定要一致

而这里的问题就在于mybatis在进行赋值时会使用实体类的构造方法进行赋值,如果构造方法中的参数个数与mysql结果集中的字段数量不一致时,特别是少了前面的参数,赋值时会按照顺序进行赋值,就有可能会出错。

这里的解决办法很简单,只要在实体类中添加一个空的构造方法

public Employee() {
    }

即可,mybatis会优先使用最适合的构造方法进行赋值,如果找不到适合的构造方法,就会使用空的构造方法,在赋值时会从实体类的属性中查找与结果集中字段名相同的属性进行赋值。

这让我想起以前在刚学习javaweb时老师总是强调空的构造方法的重要性,却始终不能理解,这次的出错让我记得以后对于pojo类的定义时,如果需要定义有参的构造方法,一定要把无参构造方法给补上,防止出现类似问题。

以上都是本人自己的理解,可能会与真正的解答不一致,欢迎各位大佬指正。

Error attempting to get column 'e_gender' from result set

原文地址:https://www.cnblogs.com/xywang-35/p/12640000.html

时间: 2024-11-09 10:50:34

Error attempting to get column 'e_gender' from result set的相关文章

Parse Fatal Error at line 41 column 24: 元素类型 &quot;url-pattern&quot; 必须由匹配的结束标记 &quot;&lt;/url-pattern&gt;&quot; 终止

1.错误描述 严重: Parse Fatal Error at line 41 column 24: 元素类型 "url-pattern" 必须由匹配的结束标记 "</url-pattern>" 终止. org.xml.sax.SAXParseException; systemId: jndi:/localhost/SpringMVCH/WEB-INF/web.xml; lineNumber: 41; columnNumber: 24; 元素类型 &qu

Parse Fatal Error at line 4 column 43: 已经为元素 &quot;web-app&quot; 指定属性 &quot;xmlns&quot;。

Parse Fatal Error at line 4 column 43: 已经为元素 "web-app" 指定属性 "xmlns". org.xml.sax.SAXParseException; systemId: jndi:/localhost/party68/WEB-INF/web.xml; lineNumber: 4; columnNumber: 43; 已经为元素 "web-app" 指定属性 "xmlns". 不

Error Code: 1054. Unknown column &#39;age&#39; in &#39;user&#39;

1.错误描述 10:28:20 alter table user modify age int(3) after sex Error Code: 1054. Unknown column 'age' in 'user' 0.000 sec 2.错误原因 原本在user表中有age字段,但是在测试阶段删除了,后期将age位置修改,所以报错 3.解决办法 首先,先向user表中插入age字段:然后再修改它的位置 Error Code: 1054. Unknown column 'age' in 'u

Jmeter BeanShell 引用变量报错jmeter.util.BeanShellInterpreter: Error invoking bsh method: eval Parse error at line 14, column 181 : Error or number too big for integer

如果你通过CSV Data Set Config或者_StringFromFile函数来参数化你的请求,需要特别注意当参数为纯数字时,jmeter会默认将其识别成int型数据,说明jmeter并不是默认以String类型对数据进行读取的:范围-2147483648到2147483647,如果超出这个范围(例如2147483648这个数字):jmeter控制台则会抛出如下异常:jmeter.util.BeanShellInterpreter: Error invoking bsh method:

POSTGRESQL中ERROR: recursive query &quot;t&quot; column 2 has type character varying(150) in non-recursive term but type character varying overall

最近在做项目的时候有个需求是需要查到当前登录的用户下辖所有区域的数据,并将查询出来的部门信息以如下格式展示 最高人民法院>江苏省高级人民法院>南通市中级人民法院最高人民法院>江苏省高级人民法院>连云港市中级人民法院 ,于是用如下语句查询 WITH RECURSIVE T AS ( SELECT c_id, c_name FROM db_aty.t_aty_corp WHERE c_pid IS NULL UNION ALL SELECT D.c_id, T.c_name || '&

Mongodb_&quot;Error parsing YAML config file: yaml-cpp: error at line 3, column 9: illegal map value&quot;解决方法

在启动配置文件的时候,系统报错:Error parsing YAML config file: yaml-cpp: error at line 3, column 9: illegal map value 首先检查一下各个参数是否配置正确 第二步查看文件路径中是否正确,路径中用双引号包围时("D:\MongoDB\data"),应该将路径中的"\"换成"/"("D:/MongoDB/data") 第三步查看配置文件中是否以Ta

mysql命令 出现ERROR 1054 (42S22): Unknown column &#39;password&#39; in &#39;field list&#39;

1.安装 brew install msyql 2.更新 brew upgrade mysql 3.启动 To have launchd start mysql now and restart at login: brew services start mysqlOr, if you don't want/need a background service you can just run: mysql.server start 4.登录 mysql -uroot 5.查看用户及密码 selec

ERROR 1054 (42S22): Unknown column &#39;password&#39; in &#39;field list&#39;

解决: update MySQL.user set authentication_string=password('123456') where user='root'; FLUSH PRIVILEGES; 技术交流群: 816227112 ERROR 1054 (42S22): Unknown column 'password' in 'field list' 原文地址:https://www.cnblogs.com/helloworld6379/p/11027505.html

异常-Exception in thread &quot;main&quot; net.sf.jsqlparser.parser.TokenMgrError: Lexical error at line 1, column 596. Encountered: &lt;EOF&gt; after :

1 详细异常 Exception in thread "main" net.sf.jsqlparser.parser.TokenMgrError: Lexical error at line 1, column 596. Encountered: <EOF> after : at net.sf.jsqlparser.parser.CCJSqlParserTokenManager.getNextToken(CCJSqlParserTokenManager.java:3124)