记一次未指定jdbcType导致的报错

BytePioneer
• 阅读 1542

报错现场还原

一个批量入库的sql自己测试的时候正常,在线上报了

### Error updating database.  Cause: java.sql.SQLSyntaxErrorException: ORA-01790: 表达式必须具有与对应表达式相同的数据类型    

原来的sql是这样写的

    <insert id="batchInsert">
        insert into
        <include refid="TABLE_NAME"/>
        (
            CID,
            TS,
            PHONE,
            NUM_PACKAGE,
            COST_MONTHPRICE,
            COST_PRICE,
            ONLINE_TIME,
            LOG_TIME
        )
        <foreach collection="list" item="item" separator="union all">
            select
                #{item.cid},
                #{item.ts},
                #{item.phone},
                #{item.numPackage},
                #{item.costMonthprice},
                #{item.costPrice},
                #{item.onlineTime},
                sysdate
            from dual
        </foreach>
    </insert>

其中onlineTime字段在现场有空的情况,怀疑未加jdbcType=DATE的情况下mybatis将这个字段置为了''空串。

  <insert id="batchInsert">
        insert into
        <include refid="TABLE_NAME"/>
        (
            CID,
            TS,
            PHONE,
            NUM_PACKAGE,
            COST_MONTHPRICE,
            COST_PRICE,
            ONLINE_TIME,
            LOG_TIME
        )
        <foreach collection="list" item="item" separator="union all">
            select
                #{item.cid,jdbcType=INTEGER},
                #{item.ts,jdbcType=INTEGER},
                #{item.phone,jdbcType=VARCHAR},
                #{item.numPackage,jdbcType=VARCHAR},
                #{item.costMonthprice,jdbcType=VARCHAR},
                #{item.costPrice,jdbcType=VARCHAR},
                #{item.onlineTime,jdbcType=DATE},
                sysdate
            from dual
        </foreach>
    </insert>

我记得这个jdbcType有时还会引发索引失效的问题,所以以后还是都带上这个配置吧。

点赞
收藏
评论区
推荐文章
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Spring竟然可以创建“重复”名称的bean?—一次项目中存在多个bean名称重复问题的排查
众所周知,在Spring中时不能够创建两个名称相同的bean的,否则会在启动时报错:但是我却在我们的spring项目中发现了两个相同名称的bean,并且项目也可以正常启动,对应的bean也可以正常使用。
Wesley13 Wesley13
3年前
mysql 导入SQL文件报错, Specified key was too long; max key length is 767 bytes
\MySQL导入数据的时候,总是报错,本地测试都没办法测试导出SQL文件正常,在导入SQL文件的时候,报错大部分数据表导入成功,个别的失败     在网上看到很多建议: 1.建议别直接运行sql文件,你可以尝试打开sql文件自己选取sql执行2.Navicat运行SQL文件时,去掉第二个√(每个运
Stella981 Stella981
3年前
IDEA打开Maven项目找不到jar问题
这应该是IDEA的bug导致的,我发现不管是Eclipse建的项目,还是IDEA建的项目,都有可能出现本地Maven仓库有jar包,但是项目报错找不到jar包。今天找到解决方案了,记录一下:我发现同一个项目,通过git或者svn,clone相同的分支和版本,在某些电脑上正常,某些电脑上报错。实际上是IDEA在打开项目的时候会在根目录下生成一个以项
Wesley13 Wesley13
3年前
thinkphp3.2.3模板渲染支持三元表达式
thinkphp3.2.3模板渲染支持三元表达式{$status?'正常':'错误'}{$info'status'?$info'msg':$info'error'}注意:三元运算符中暂时不支持点语法。如下:           <divclass"modalhidefade"id'myModa
Wesley13 Wesley13
3年前
Java 8 Lambda表达式的使用
lambda表达式允许你通过表达式来代替功能接口。lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。Lambda表达式还增强了集合库。JavaSE8添加了2个对集合数据进行批量操作的包:java.util.function包以及java.util.stre
Wesley13 Wesley13
3年前
4cast
4castpackageloadcsv.KumarAwanish发布:2020122117:43:04.501348作者:KumarAwanish作者邮箱:awanish00@gmail.com首页:
Easter79 Easter79
3年前
SringBoot启动报日志配置错误
最近在启动项目的时候,报错,报错的原因是springBoot日志配置文件不对。由于自己是刚接触springboot,是同事帮忙解决的,自己非常感谢!先总结如下:1.首先,找到logbackspring.xml配置文件1<springPropertyscope"context"name"springAppNa
Stella981 Stella981
3年前
AJPFX总结关于Java中过滤出字母、数字和中文的正则表达式
1、Java中过滤出字母、数字和中文的正则表达式(1)过滤出字母的正则表达式\^(AZaz)\(2)过滤出数字的正则表达式\^(09)\(3)过滤出中文的正则表达式\^(\\\\u4e00\\\\u9fa5)\(4)过滤出字母、数字和中文的正则表达式\^(azAZ09\\\\u
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(