`
cobo85
  • 浏览: 115184 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JDBC在精确查询时对字符串型参数的校验处理

    博客分类:
  • JDBC
阅读更多

       今天遇到这样一个问题:用hibernate进行精确匹配查询的时候,一直出错。把查询参数去掉一个字符,即能顺利通过。刚开始还以为是hibernate在进行sql转换的的时候对匹配字段的参数进行校验,因为实体配置文件中该字段长度声明为10,而查询参数的长度刚好为11。但修改过配置文件以后问题依然存在,看了hibernate并没有去做这些参数的校验,那么问题会不会出现在jdbc上呢?想到这里便顺手些了下测试代码,发现问题确实是出现在JDBC上的。

   

      

PreparedStatement prsm = co.prepareStatement("select * from user where name= ?");
    	prsm.setString(1, name);
	prsm.executeQuery();

 数据库中name对应的字段长度定义为10,而参数中name的长度为11,这样执行查询的时候就会报类型不对匹配的问题,但是如果这些写

    

PreparedStatement prsm = co.prepareStatement("select * from user where name= '"+name+"'");
    	//prsm.setString(1, name);
	prsm.executeQuery();

 就能顺利通过。下面的亦能通过

PreparedStatement prsm = co.prepareStatement("select * from user where name like ?");
   	prsm.setString(1, name);
	prsm.executeQuery();

 

 

    (以上只对DB2数据库做了测试,其他的没有测试)

 

总结:在进行精确匹配查询的时候,一定要注意参数的长度,最好不要超过数据库对该字段的设定长度,如果底层方法包装的是PreparedStatement ,并且用setString进行参数填充的话,那么系统将抛出异样!但是如果是拼装sql,然后在执行,就不存在这样的问题。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics