zoukankan      html  css  js  c++  java
  • 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); 
    
    二者效果一样,建议采用第一种方式,比较容易理解
    
  • 相关阅读:
    oc 基本基础类型之NSString
    oc 内存管理
    自定义的init方法和重写的init方法
    property属性
    iOS 开发朗读文字
    获取当前最顶层的ViewController
    二维码扫描的简单封装
    OC百度导航类的封装
    OC上传图片的封装(配合AFNetWorkiing)
    集成百度地图报错41个解决方法(转)
  • 原文地址:https://www.cnblogs.com/HW-CJY/p/13751677.html
Copyright © 2011-2022 走看看