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); 

二者效果一样,建议采用第一种方式,比较容易理解
posted @ 2020-08-22 19:51  小熊猫陈江一  阅读(354)  评论(0编辑  收藏  举报