JDBC中模糊查询处理 % 和 _
JDBC中模糊查询处理 % 和 _
前提:明白一点在MySQL中 输入单引号和双引号的作用一样
举个列子:比如我们需要在学生表中查询姓名中带有 “张” 的人。
那么在数据库中的SQL语句就应该写成
select * from student where sname like '%张%';
或者
select * from student where sname like "%张%";
由于我们是通过Java中的JDBC进行数据库的访问
所以接下来统一采用 双引号 的方式 进行便于理解
而无论我们采用下面的那种方式,都希望在Java语句中得到的最后结果为
String sql = "select * from stusdent where sname like "%张%" ;";
方式一:将%在外部与查询的字符拼接好后再传入SQL语句
Java中方式一的 SQL语句书写如下:
String sql = "select * from student where sname like ?;";
preparedStatement.setString(1, "%" + letter + "%");
方式一分析:
Scanner input = new Scanner(System.in);
String letter = input.nextLine();
从键盘输入 张
则 letter = "张";
之后 调用方法
preparedStatement.setString(1, "%" + letter + "%");
看第二个参数: "%" + "张" + "%"
字符串的拼接 后变成---> "%张%" 而这一整个就是 ?
String sql = "select * from student where sname like ? ;";
最后的结果就成了
String sql = "select * from stusdent where sname like "%张%" ;";
方式二:将% 直接放在SQL语句中,而不是后来传进去的
Java中方式二的 SQL语句书写如下:
String sql = "select * from student where sname like \"%\"?\"%\" ;";
preparedStatement.setString(1, letter);
方式二分析:
Scanner input = new Scanner(System.in);
String letter = input.nextLine();
从键盘输入: 张
则 letter = "张";
之后 调用方法
preparedStatement.setString(1, letter);
看第二个参数: "张" 就是 ? 号占位
String sql = "select * from student where sname like \"%\"?\"%\" ;";
将 ? 替换为 "张"
String sq="select * from student where sname like \"%\" "张" \"%\";";
而我们希望的结果是
String sql = "select * from stusdent where sname like "%张%" ;";
这时让我们来解析下 下面的这个代码
\"%\" "张" \"%\"
\ 转义 字符
那就得出 "%""张""%"
就近原则 两两双引号进行匹配:即 "" 为空,不存在任何东西
所以最后就剩下: "%张%"
总结:
- 明白一点在MySQL中 输入单引号和双引号的作用一样
- 其次一定要将 传入的参数 当作 ? 来看,是一个整体
- _ 与% 用法一样,% 指代0到n个字符,而 _ 仅仅指代一个字符
写法总结:
% 和 _ 书写一样,根据自己需求
第一种书写方式:
String sql = "select * from student where sname like ?;";
preparedStatement.setString(1, "%" + letter + "%");
第二种方式
String sql= " select * from student where sname like \"%\"?\"%\" ;";
preparedStatement.setString(1, letter);
二者效果一样,建议采用第一种方式,比较容易理解