问题描述
这天写代码遇到了一个很奇怪的,一个简单地insert的sql,本地没有问题,但是客户那边怎么也插不进去数据,因为是一个异步的插入,并且也没有存储返回信息,客户那边的部署人员也不太会看日志,百思不得诶。
答案
问题出现在,我写sql的时候偷懒了
通常而言,我们写sql正规的插入,字段与插入的值对应,像下面这样写
方式1:
insert into DB(ID,NAME,IP,PORT,SERVICE_NAME,USERNAME,PASSWORD,IS_ACTIVE,
DBID,INST_ID,IS_INOEM,IS_PDB,OEM_ID,IS_RAC,IS_COLLECT,HOST_NAME ,
COLLECT_FREQUENCY) values(#{dbid},#{dbName},#{ipAddress},#{port},
#{instanceName},#{userName},#{password},#{status},#{dbid},
#{instanceNumber},#{collectType},#{isPdb},#{oemId},#{isRac},
#{collectOnoff},#{hostName},#{collectFrequency})
但是当时赶时间,项目比较急,就没有这样写,而是直接采用了下面这样的写法,这样写,如果使用你本地的sql文件直接导出来区建表,是不会有问题的,但是如果不是用你本地的sql文件,就会有问题。
方式2:
insert into DB values(#{dbid},#{dbName},#{ipAddress},#{port},
#{instanceName},#{userName},#{password},#{status},#{dbid},
#{instanceNumber},#{collectType},#{isPdb},#{oemId},#{isRac},
#{collectOnoff},#{hostName},#{collectFrequency})
通常来说直接用相同的sql脚本建表,字段的位置,顺序是一致的,但是如果不是使用相同的脚本,那么字段的顺序就乱了,这也是上面这种写法会报错的原因,对应不上了。
我这出现的原因是,原本这张表新加了个字段,但是部署人员,直接在客户那使用
alter table db add(host_name varchar(50));`
直接在原表的基础上加了个字段,导致字段位置变了,所以字段对应不上了,就会报错。
总结
老宝贝,干啥事,可千万别偷懒!