关于通过Java连接mysql对反斜杠”\“转义的测试详解

 更新时间:2017年06月16日 09:27:40   作者:Juwend  
这篇文章主要给大家介绍了关于通过Java连接mysql对反斜杠”\“转义的测试的相关资料,文中通过实例代码介绍的非常详细,对大家理解反斜杠”\“转义具有一定的参考学习价值,需要的朋友们下面来一起看看吧。

前言

在java中,反斜杠“\”转义是“\”,因此表示一个“\”要使用“\\”,如果是正则表达式,那么表示一个“\”需要用“\\\\”,在mysql中,反斜杠转义依然是“\”,和java相同。

现在问题是:如果mysql中一个字段的内容包含反斜杠,然后通过java连接mysql去筛选这个字段所在的条目,要怎么写才能将该字段筛选出来呢?下面就是一个实验:

1,先建立测试数据:

CREATE TABLE `test` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(255) DEFAULT NULL,
 PRIMARY KEY (`id`)
);
insert into test (name) values ('\\'), ('\\\\');

向数据库中插入2条数据,name的值分别是“\”和“\\”。

2,使用jdbc连接mysql,然后测试筛选条件:

Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");
PreparedStatement pstmt = conn.prepareStatement("select * from test where *条件"); // “*条件”见下文
pstmt.setString(1, "*筛选值"); // “*筛选值”见下文
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
 System.out.println(rs.getString("name"));
}

3,测试:

i.

*条件 为:name = ?

*筛选值 为:

“\\”可以筛选出name为“\”的数据

“\\\\”可以筛选出name为“\\”的数据

这个看起来是比较正常的

ii.

*条件 为:name like ?

*筛选值 为:

“\\”或“”\\\\可以筛选出name为“\”的数据

“\\\\\\”或“\\\\\\\\”可以筛选出name为“\\”的数据

开始不变得奇怪了…

iii.

*条件 为:name like ‘%' ?

*筛选值 为:

“\\”或“\\\\”可以筛选出name为“\”和“\\”的数据

“\\\\\\”或“\\\\\\\\”可以筛选出name为“\\”的数据

和 ii. 有点类似

iv.

*条件 为:name like ? ‘%'

*筛选值 为:

“\\\\”可以筛选出name为“\”和“\\”的数据

“\\\\\\\\”可以筛选出name为“\\”的数据

又变得好像正常了…类似正则中的转义

v.

*条件 为:name like ‘%' ? ‘%'

*筛选值 为:

“\\\\”可以筛选出name为“\”和“\\”的数据

“\\\\\\\\”可以筛选出name为“\\”的数据

和 iv. 类似了

4,分析:

使用“=”方式筛选貌似就是常规理解中的转义,但是一旦使用了“like”就开始变得奇怪了,从测试来看,使用“like”筛选有些类似正则式,不过没有使用“%”占位符的筛选中常规转义依然有效,另外,奇怪的是 ii. 和 iii. 中的6根反斜杠是个什么鬼…完全不能理解…

5,结论:

sql语句是“=”筛选时,java就使用常规转义即可

sql语句是“like”筛选时,最好使用正则式转义

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • Java中的运算符你知道多少

    Java中的运算符你知道多少

    这篇文章主要为大家详细介绍了Java中的运算符,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • Idea2019创建Springboot Web项目的方法步骤

    Idea2019创建Springboot Web项目的方法步骤

    这篇文章主要介绍了Idea2019创建Springboot Web项目的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • java基础理论Stream的Filter与谓词逻辑

    java基础理论Stream的Filter与谓词逻辑

    这篇文章主要为大家介绍了java基础理论Stream的Filter与谓词逻辑,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03
  • Java对比两个实体的差异分析

    Java对比两个实体的差异分析

    这篇文章主要介绍了Java对比两个实体的差异分析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Java shiro安全框架使用介绍

    Java shiro安全框架使用介绍

    安全管理是软件系统必不可少的的功能。根据经典的“墨菲定律”——凡是可能,总会发生。如果系统存在安全隐患,最终必然会出现问题,这篇文章主要介绍了SpringBoot安全管理Shiro框架的使用
    2022-08-08
  • java策略枚举:消除在项目里大批量使用if-else的优雅姿势

    java策略枚举:消除在项目里大批量使用if-else的优雅姿势

    这篇文章主要给大家介绍了关于Java彻底消灭if-else的8种方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2021-06-06
  • SpringBoot整合logback日志的详细步骤

    SpringBoot整合logback日志的详细步骤

    这篇文章主要介绍了SpringBoot整合logback日志的详细步骤,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • 详解eclipse将项目打包成jar文件的两种方法及问题解决方法

    详解eclipse将项目打包成jar文件的两种方法及问题解决方法

    本文给大家介绍了eclipse中将项目打包成jar文件的两种方法及其遇到问题解决方法,本文图文并茂给大家介绍的非常详细,需要的朋友可以参考下
    2017-12-12
  • spring cloud gateway网关路由分配代码实例解析

    spring cloud gateway网关路由分配代码实例解析

    这篇文章主要介绍了spring cloud gateway网关路由分配代码实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • 详解Spring Boot Security工作流程

    详解Spring Boot Security工作流程

    Spring Security,这是一种基于 Spring AOP 和 Servlet 。这篇文章主要介绍了Spring Boot Security的相关知识,需要的朋友可以参考下
    2019-04-04

最新评论