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模糊查询问题,代码如下,总是接收不到查询结果,但是如果用精确查找就能接受到查询结果?的主要内容,如果未能解决你的问题,请参考以下文章

Mysql模糊查询,按相似度排序

模糊查询中输入通配符的问题

java mybatis 分页模糊查询页面怎么写

Hibernate使用createSqlQuery进行模糊查询时找不到数据

java 中模糊查询

如何用java实现模糊查询