• 单引号“扭转乾坤”


            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


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


  • 相关阅读:
    野生的男人,家养的猪
    能在xcode5中开发基于IOS7sdk的应用程序兼容ios4.3之后的系统吗?
    ios开发怎样才能做到代码和界面彻底分离,方便换肤?
    如何解决iOS6、iOS7 3.5寸和4.0寸屏的适配问题?不要写两个xib文件
    哪些听起来很牛逼的互联网理念!
    iOS 使用宏 常量 报错 expected expression
    ios测试宏指令出错:“Expected identefier”
    某个 页面覆盖了 UITabBar 的tabItem的解决办法
    ios(包括6、7)应用程序引用系统通讯录的方法 [亲测可行]
    ios 获得通讯录中联系人的所有属性 亲测,可行 兼容io6 和 ios 7
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13315446.html
Copyright © 2020-2023  润新知