java模糊查询问题,代码如下,总是接收不到查询结果,但是如果用精确查找就能接受到查询结果?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java模糊查询问题,代码如下,总是接收不到查询结果,但是如果用精确查找就能接受到查询结果?相关的知识,希望对你有一定的参考价值。
public ArrayList<Commodity> selectCommodity(String str)
ArrayList<Commodity> list = new ArrayList<Commodity>();
PreparedStatement pstmt = null;
ResultSet rs = null;
try
Connection con = DBConnection.getConnection();
if(str == "")
pstmt = con.prepareStatement("SELECT * FROM tbcommodity");
else if(Mytools.isNumeric(str))//如果输入的是数字就按ID进行查找
pstmt = con.prepareStatement("SELECT * FROM tbcommodity where id like ?");
pstmt.setString(1, "'%"+str+"%'");
else //不是数字就按名字进行查找
pstmt = con.prepareStatement("SELECT * FROM tbcommodity where name like ?");
pstmt.setString(1, "'%"+str+"%'");
rs = pstmt.executeQuery();
while(rs.next())
Commodity com = new Commodity();
com.setId((rs.getInt("id")));
com.setName((rs.getString("name")));
com.setCatalog((rs.getString("catalog")));
com.setSupplierID(rs.getInt("supplierID"));
com.setProductiondate(rs.getDate("productiondate"));
com.setDurabilityperiod(rs.getInt("durabilityperiod"));
com.setPrice(rs.getDouble("price"));
com.setCount(rs.getInt("count"));
list.add(com);
rs.close();
pstmt.close();
catch(Exception e)
e.getStackTrace();
System.out.println("查询失败!");
finally
DBConnection.closeConnection();
return list;
你好,很高兴回答你的问题。
问题的原因是拼接模糊查询条件是有问题。仔细看下图红线标识的位置,在百分号两边各加了一个单引号。这个是不需要的。
如果参数是通过setString方法赋值的,则在最终执行的sql时会自动拼接单引号的。这里加上单引号反而是错误的了。
如果有帮助到你,请点击采纳。
我解答的大部分是软件开发新人遇到的问题,如果有兴趣可以关注我。
参考技术A百分号左右不用加单引号!你想想你用等于的时候加单引号了吗?
这是我模拟的sys_user表数据:
根据name模糊查询,获取id:
运行结果:
参考技术B 是不是多了个问号Mysql模糊查询,按相似度排序
mysql怎么模糊查询?
你的代码没跑。没有库
看了下语法没有问题
或者你可以试试把SQL改成LIKEconcat("%","明","%")
另外JAVA现在基本上用不到这样的数据库连接方式了。学习的话直接直接找点其他的例子来做
MYSQL模糊查询问题
select*fromtablewhereINSTR(参数,字段)>0
查询字段中字符串是否在参数中出现
本回答由提问者推荐
mysql 模糊 查询 语句
select sheetName from tableName order by (len(sheetName))descselect * from caijing order by urltime desc limit100
mysql 模糊查询
1、如果你什么也没有输入的话,sql语句就如下:
select * from tablename where name like %%;
这样的话就是 name 等于任何字符都会被查出,当然所有内容都会出来了。
2、这不是问题,从查询的设计角度看,什么都不输入自然是要匹配所有数据,相反输入了东西就是匹配它了。
*****************
*****************
如果你想什么都不输入的时候什么也不返回的话方法如下:
在后台写两个sql,类似如下
if ($name == "")
$exec="select * from tablename where 1=2";
else
$exec="select * from tablename where name like %$name%";
以上,希望对你有所帮助。我描述下
应该是 输入什么就出什么(这儿有2个方向,1.模糊查询2.精确查询)
然后不输入就查询全部的
根据你的描述是第一个应该
select * from tablename where name like %+$name+%
大概就是这样的
如果什么都不输入,点“查询”也不会出现任何结果该怎么写?
那就不要用like 直接用=号
把where 后的改为 name = $name
因为数据多了like的效能不好给你个思路吧,如果什么都不输入,那么$name的值就是空值,你可以在前台加判断,如果是空值的话那返回就可以了如果是中文可能还有编码问题,为什么不是select * 而是select count(*),页面值是否正确传入servlet?这count 不管如何都有结果的
你最好看看你的notes的值是不是正确?
还有查查是不是因为table_name和where之间没加空格
以上是关于java模糊查询问题,代码如下,总是接收不到查询结果,但是如果用精确查找就能接受到查询结果?的主要内容,如果未能解决你的问题,请参考以下文章