good_name不会是传了个null进去吧

解决方案 »

  1.   

    第2句sql在数据库一些查询工具中先执行一下,确定是否有符合条件数据
      

  2.   

    把这个sql语句打印到后台,估计应该是乱码问题。
      

  3.   

    首先用PLSQL执行一下你的 SQL语句看有没有问题,如果没有看看你的JSP页面(如果是JSP提交的话)里面有没有进行编码:
    <% request.setCharacterEncoding(response.getCharacterEncoding()); %>可能是这个原因。
      

  4.   

    用的什么数据库,不同的数据库通配符是不一样的。还有,我原来在Access中试过,在Access里面执行SQL语句没问题,但是该SQL语句放到JAVA程序里面执行却得不到正确结果。
      

  5.   

    sql += " and goods_name like '" + goods_name +"%'";
      

  6.   

    把sql頁面上打印出來拿進分析器執行
      

  7.   

    把sql頁面上打印出來拿進分析器執行
      

  8.   

    先把第二句执行一下确认有结果
    然后打出程序中的查询SQL语句
    看具体问题在哪,对症下药
      

  9.   

    数据库用的是mysql;环境是jsp下
    第一句是可以得到执行结果的。
    第二句用system.out.print(sql);显示是正常的,但是就是得不到结果!
    如第二句为中得goods_name = 红烧排骨
         select * from cy_goods where parent_account =1 and goods_id = 5 and goods_name like   '%红烧排骨%';
    ##################
    还有一个问题问大家:
    我用外连接耶是会出现问题得。如
    表A(id,name ,....)
    数据 1,“111”
         2,“2222”
         3,“333”
    表B(id,a_id,....)
    数据1,1,..
        2,1,..
        3,2,...
        4,2
    要实现的效果是通过两个表的连接并根据a_id分类统计
    得到的结果为 :
    1 count(a.id)=2
    2 count(a.id)=2
    3 count(a.id)=0
    这个条件该怎么写
    我是这么写得:
    select a.id, count(a.id) as counter1 where a.id=b.a_id(*) group by a.id
    但是这个外连接却是查不到数据,执行这句就出现了问题了 ,我试着把*换成+那也是不可以得。
    我采用得命运mysql数据库+jsp环境
      

  10.   

    原先是正常得,后来不知道怎么回事就不正常了。那时我一看是传参编码出了问题(简体中文变成了乱码),接着用隔 getbytes()处理了一下,那么传递参数是正常显示了,但是还是查不到数据得!
      

  11.   

    你用数据库url配置对了没有,指出了字符集类型了吗?
    把SQL脚本打出来调试一下,应该很简单的呀!
      

  12.   

    首先我要指出这样的写法有一个很大的漏洞!那就是长说的SQL注入漏洞!
    sql += " and goods_name like '" + goods_name +"%'";
    假如我的goods_name 是 %' or '%'='
    那么你的SQL执行语句就变成了
      and goods_name like '%' or '%'='%'
    你自己想想这是什么后果!你的所有数据就全出来了!至于你说的这个问题,首先要排除编码问题,如果不是的话再考虑你整个的语句是否有效!最好的办法就是检测你实际组成的SQL代码。
      

  13.   

    谢谢楼上的解答。
    实际的sql代码是没有问题的啊(至少我看不出语法上的错误和单词写错)
    假如当goods_name = “红烧排骨”;这样就是查不出数据的,而实际是有数据的。
    当把and goods_name like...这个条件去掉就是可以得到数据的。
    我在用System.out.print(sql)看到的语句中,中文显示也是正常的。
    就不知道为何检索不到数据
      

  14.   

    String sql = "select * from cy_goods where parent_account ='" +   parent_account+"'";
      if(goods_id > 0)
       sql += " and goods_id = '" + goods_id+"'";
      if(goods_name !=null && !goods_name.equals(""))
       sql += " and goods_name like '%" + goods_name +"%'";  
      

  15.   

    to blackhost(剑心)的问题
    需要对查询条件中的参数进行过滤
      

  16.   

    把你的goods_name字段trim一下试试,可能是这个问题,以前我就碰到过的
      

  17.   

    也不行得。把goods_name 得值变为英文,那么就可以了,我估计是jsp中用request获取参数得时候编码不一样,但是在用System.out.print()输出显示得是正常得简体中文啊...........
    请那位高手帮帮忙啊!
      

  18.   

    if(goods_name !=null && !goods_name.equals(""))
       sql += " and goods_name like '%" + goods_name +"%'";  楼主可以用方法将:goods_name 处理一下
        public String FormatString(String keyword)
        {
            keyword = keyword.trim().replace(' ', '%') ;
            keyword = "%" + keyword + "%" ;
            return keyword ;
        }
    改:
    sql += " and goods_name like " + FormatString(goods_name);楼主可以试试看,行不行!
      

  19.   

    也不行得!
    谢谢各位!
    我把原先得字符编码改了一下现在可以查询到了。
    不过我想不通。
    因为一开始,我就用request来获取参数再查询数据库得,这样数据得不到,而sql中得中文显示也为乱码,所以再用别的方法测试后还是不行得情况下,我对参数进行了处理,使之显示为正常得简体中文,但是结果数据还是没有(实际是有得)。刚刚又把他换回原样,竟然就可以了……