Bad format for Timestamp ‘203‘ in column 1

博客内容描述了作者在数据库操作中遇到的一个错误:在尝试查询时,系统尝试将第一列的ID(主键,int类型)转换为Timestamp,导致报错。问题出现在11月份的数据上,删除11月数据后错误消失。作者尝试了不用Mybatis的QueryWrapper,改用XML写SQL,但问题依旧。通过查看源码发现字段被当作Date处理。最后,作者发现实体类缺少包含ID的构造函数,添加后解决了问题。
摘要由CSDN通过智能技术生成

突然数据库报错,完整报错内容:

Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.TransientDataAccessResourceException: Error attempting to get column 'id' from result set.  Cause: java.sql.SQLException: Bad format for Timestamp '203' in column 1.
; SQL []; Bad format for Timestamp '203' in column 1.; nested exception is java.sql.SQLException: Bad format for Timestamp '203' in column 1.] with root cause

意思是,第一列的id转timestamp出现问题,可问题是,第一列id是主键int型的啊,我擦了

查询方式

QueryWrapper<QualityKfzsdata> wrapper = Wrappers.query();
wrapper.select("id, pushdate, region, region_code, pushmonth, sum(qlthl) as qlthl,         
        sum(fnthl) as fnthl, sum(jhzs) as jhzs, sum(thsc) as thsc");
wrapper.groupBy("pushmonth", "region_code");
List<QualityKfzsdata> list = kfzsdataService.list(wrapper);

数据库:

这件事儿牛逼就牛逼在,查11月份之前的3个月数据都好使,有11月份的数据了就不好使了。 邪了门了。

我依次实验了几种情况,只要把11月份数据删除,就不报错。是不是和字段类型啥的有关。

有没有可能是mybatis有bug了,我不用QueryWrapper查询,改用mapper.xml写sql语句:

SELECT id, pushdate, region, region_code, pushmonth, SUM(qlthl) AS qlthl, SUM(fnthl) AS fnthl, SUM(jhzs) AS jhzs, SUM(thsc) AS thsc FROM quality_xxxx GROUP BY pushmonth, region_code

也tm不好使,那是咋回事儿呢,id明明是整型,为啥要转换timestamp呢,去看了眼报错的源码:

protected Timestamp getTimestampFast(int columnIndex, byte[] timestampAsBytes, int offset, int length, Calendar targetCalendar, TimeZone tz, boolean rollForward, MySQLConnection conn, ResultSetImpl rs) throws SQLException {
        try {
            Calendar sessionCalendar = conn.getUseJDBCCompliantTimezoneShift() ? conn.getUtcCalendar() : rs.getCalendarInstanceForSessionOrNew();
            boolean allZeroTimestamp = true;
            boolean onlyTimePresent = false;

            int year;
            for(year = 0; year < length; ++year) {
                if (timestampAsBytes[offset + year] == 58) {
                    onlyTimePresent = true;
                    break;
                }
            }

            for(year = 0; year < length; ++year) {
                byte b = timestampAsBytes[offset + year];
                if (b == 32 || b == 45 || b == 47) {
                    onlyTimePresent = false;
                }

                if (b != 48 && b != 32 && b != 58 && b != 45 && b != 47 && b !&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值