首先我要指出这样的写法有一个很大的漏洞!那就是长说的SQL注入漏洞! sql += " and goods_name like '" + goods_name +"%'"; 假如我的goods_name 是 %' or '%'=' 那么你的SQL执行语句就变成了 and goods_name like '%' or '%'='%' 你自己想想这是什么后果!你的所有数据就全出来了!至于你说的这个问题,首先要排除编码问题,如果不是的话再考虑你整个的语句是否有效!最好的办法就是检测你实际组成的SQL代码。
<% request.setCharacterEncoding(response.getCharacterEncoding()); %>可能是这个原因。
然后打出程序中的查询SQL语句
看具体问题在哪,对症下药
第一句是可以得到执行结果的。
第二句用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环境
把SQL脚本打出来调试一下,应该很简单的呀!
sql += " and goods_name like '" + goods_name +"%'";
假如我的goods_name 是 %' or '%'='
那么你的SQL执行语句就变成了
and goods_name like '%' or '%'='%'
你自己想想这是什么后果!你的所有数据就全出来了!至于你说的这个问题,首先要排除编码问题,如果不是的话再考虑你整个的语句是否有效!最好的办法就是检测你实际组成的SQL代码。
实际的sql代码是没有问题的啊(至少我看不出语法上的错误和单词写错)
假如当goods_name = “红烧排骨”;这样就是查不出数据的,而实际是有数据的。
当把and goods_name like...这个条件去掉就是可以得到数据的。
我在用System.out.print(sql)看到的语句中,中文显示也是正常的。
就不知道为何检索不到数据
if(goods_id > 0)
sql += " and goods_id = '" + goods_id+"'";
if(goods_name !=null && !goods_name.equals(""))
sql += " and goods_name like '%" + goods_name +"%'";
需要对查询条件中的参数进行过滤
请那位高手帮帮忙啊!
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);楼主可以试试看,行不行!
谢谢各位!
我把原先得字符编码改了一下现在可以查询到了。
不过我想不通。
因为一开始,我就用request来获取参数再查询数据库得,这样数据得不到,而sql中得中文显示也为乱码,所以再用别的方法测试后还是不行得情况下,我对参数进行了处理,使之显示为正常得简体中文,但是结果数据还是没有(实际是有得)。刚刚又把他换回原样,竟然就可以了……