单引号“扭转乾坤”

        Java Web项目中,如果是用的SQL语句查询,一般的话,会拼接SQL语句,而在拼接的过程中,必须要非常小心仔细。如果拼接时,少一个符号或多一个符号,将会影响查询语句执行的结果,“一符号影响大局”,今天总算领教到了。

        前几天,我写了一个查询方法,是用SQL查询方式。由于查询条件比较多,SQL语句相对来说就比较长了,我在拼接的过程中,是按照数据库人员提供的SQL语句进行拼接的,并且在参数引入的地方加上了单引号,就是由于这个,导致后面出现问题。今天,我仔细检查页面,发现查询出的日期格式跟我所想要的日期格式不一致,需要的日期格式:20131012--20131212,而页面展示的结果只取了这个字符串的第一个字符,也就是“2”。

       接着,我反复检查,执行DAO的Test,结果显示SQL语句查询出来的结果是正确的,日期格式也是想要的,但是在页面显示的却是“2”。后来,在Dao实现中打断点,启动debug模式,进行调试,发现在遍历查询的list日期对象结果是“2”。这就奇怪了,为什么SQL语句查询出来的日期格式是规范的,而list返回的结果却是有问题的,这到底是怎么回事?问题到底出在哪儿?

       后来,经过反复地调试检查,在数据库开发人员的帮助下,终于找到了原因:拼接时多了两对单引号。

拼接时参数带单引号:

StringBuffer sb = new StringBuffer();
sb.append("select stu_num,");
sb.append("t.statis_date ");
if(StringUtils.isNotBlank(startDate) && StringUtils.isNotBlank(endDate))
{
	sb.append("from (select '")
	  .append(startDate)
	  .append("' || '--' || '")
	  .append(endDate)
	  .append("' statis_date,");
	......
	......
}

这个查询出来的的日期格式是:2


拼接时参数不带单引号:

StringBuffer sb = new StringBuffer();
sb.append("select stu_num,");
sb.append("t.statis_date ");
if(StringUtils.isNotBlank(startDate) && StringUtils.isNotBlank(endDate))
{
	sb.append("from (select ")
	  .append(startDate)
	  .append(" || '--' || ")
	  .append(endDate)
	  .append(" statis_date,");
	......
	......
}

这个查询出来的日期格式是:20131012--20131128


      这一个小小的符号,导致多大的问题,总结起来,还是由于自己的不细心,不喜欢动脑子,才会导致这种低级错误。


原文地址:https://www.cnblogs.com/hzcya1995/p/13315446.html