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

发布时间 - 2026-01-11 01:54:37    点击率:

前言

在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  # 反斜杠转义  # mysql  # 反斜杠  # 转义  # mysql语句如何插入含单引号或反斜杠的值详解  # Python3.6-MySql中插入文件路径  # 丢失反斜杠的解决方法  # 的是  # 是个  # 奇怪了  # 问题是  # 这篇文章  # 谢谢大家  # 数据库中  # 将该  # 要使  # 需要用  # 测试数据  # 就开始  # 使用了  # 有疑问  # 正则表达式  # test  # TABLE  # id  # int  # DEFAULT 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)  Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程  Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  JS实现鼠标移上去显示图片或微信二维码  EditPlus中的正则表达式 实战(1)  香港服务器如何优化才能显著提升网站加载速度?  Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives  网易LOFTER官网链接 老福特网页版登录地址  简历在线制作网站免费版,如何创建个人简历?  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】  佛山网站制作系统,佛山企业变更地址网上办理步骤?  Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程  laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法  nodejs redis 发布订阅机制封装实现方法及实例代码  如何在阿里云虚拟主机上快速搭建个人网站?  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  Laravel怎么在Blade中安全地输出原始HTML内容  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  如何快速使用云服务器搭建个人网站?  如何为不同团队 ID 动态生成多个非值班状态按钮  如何快速启动建站代理加盟业务?  Laravel如何使用Blade模板引擎?(完整语法和示例)  Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】  Laravel观察者模式如何使用_Laravel Model Observer配置  如何续费美橙建站之星域名及服务?  大型企业网站制作流程,做网站需要注册公司吗?  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  如何在IIS中配置站点IP、端口及主机头?  Laravel如何实现文件上传和存储?(本地与S3配置)  WEB开发之注册页面验证码倒计时代码的实现  Laravel如何实现API版本控制_Laravel版本化API设计方案  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  如何正确下载安装西数主机建站助手?  Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  *服务器网站为何频现安全漏洞?  JavaScript如何实现倒计时_时间函数如何精确控制  php485函数参数是什么意思_php485各参数详细说明【介绍】  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  如何快速搭建高效香港服务器网站?  Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门  怎么用AI帮你为初创公司进行市场定位分析?  如何为不同团队 ID 动态生成多个“认领值班”按钮  如何构建满足综合性能需求的优质建站方案?  个人摄影网站制作流程,摄影爱好者都去什么网站?  如何用景安虚拟主机手机版绑定域名建站?  Laravel怎么实现支付功能_Laravel集成支付宝微信支付