SQL state [null]; error code [17004]; 无效的列类型

来源:互联网 发布:linux vi 模式 编辑:程序博客网 时间:2024/05/21 19:28

  今天做到了采购单药品的添加,当完成了所有的sql,service,controller层之后。我正常的点击“采购药品添加”功能时能够正常的返回查询的列表。但是,当我测试查询功能,根据流水号查询采购单药品的添加页面中返回的列表中符合条件的记录时却报了一个这么个错误:SQL state [null]; error code [17004]; 无效的列类型。
  我一开始以为是我的sql写的有问题,后来反复的跟源码对比后,我发现没有问题呀。及时我把sql跟源码弄成一样还是报错,我还是不死心。认为是sql的问题,在网上看了一些资料。有些资料说,在sql片段中#{}中的参数应该加上jdbc的类型,比如:
 < if test=”ypxxCustom.bm!=null and ypxxCustom.bm!=””>
   and ypxx.bm = #{ypxxCustom.bm}
< /if>
 代码中的#{ypxxCustom.bm}应该写成#{ypxxCustom.bm,jdbcType=VARCHAR},我将代码修改以后我发现还是报错。我郁闷了,怎么改来改去还是报错了。后来参考了香吧香的文章《框架中无效的列类型异常分析》。
他说总结发现该问题出现的原因有两种
第一种:在mybatis映射文件中编写的sql语句有问题,存在和页面匹配多余的字段,使得产生无效的列。
第二种:在修改的jsp页面中,与mybatis中sql语句,缺少对应的列。
此时的技巧为:如果表中的字段不是很多的时候,可以将表的所有字段显示在sql语句中以及jsp页面中。
  我开始分析是否是我的前端页面有问题呢?我开始分析的jsp页面,我找到了点击“查询”所提交的form表单,仔细的对照表单中提交的字段和sql中的字段是否能够对上。后来我发现其中有三个字段在jsp页面和sql中的字段是对不上的。
 这里写图片描述
 这里写图片描述
 jsp页面中ypxxCustom包装类中有这三个属性ypxxCustom.zbjglower、ypxxCustom.zbjgupper、ypxxCustom.lb。一开始的时候ypxxCustom.lb在jsp中写成了ypxxCustom_lb,这么写ypxxCustom_lb就成了一个单独的属性而不是ypxxCustom包装类中的属性了,而我在sql中没有ypxxCustom_lb这个属性。后来我把ypxxCustom_lb改成ypxxCustom.lb以后,又把ypxxCustom.zbjglower、ypxxCustom.zbjgupper在sql中改成一致以后,就能够成功的返回正确的查询记录了。
 
 参考资料
 http://www.cnblogs.com/zjdxr-up/p/6687434.html
 

阅读全文
0 0
原创粉丝点击