首页 > 解决方案 > 有没有办法在 Prepared 语句 setString() 中用单引号包裹字符串?

问题描述

我在一个 MySQL 表中有这个列,它有一个 JSON 字符串,我正在尝试使用正则表达式提取记录。例如,列“paylod”(数据类型长文本)保存此值

{
"type":"assignment",
"location":"12345"
}

我正在使用 RLIKE 根据位置获取记录。

select * from table where payload RLIKE '"location":"[[:<:]]12345[[:>:]]"';

在 java 中使用此查询时,我使用的是准备好的语句。

String pattern = "\"location\":\"[[:<:]]12345[[:>:]]\""

当我使用 时preparedStatement.setString(payload, pattern),我没有得到任何结果。但是当我在工作台中执行查询时,我看到了获取的行。

我猜这是因为我使用的是 setString,它是用双引号括起来的模式,而 MySQL 无法解析它。

那么有前进的方向吗?我的要求是根据 JSOn 有效负载列中的键值对获取记录。

标签: javamysqlsqljdbcprepared-statement

解决方案


好的,在字符串中添加转义字符有帮助。

String pattern = "'\"location'\":'\"[[:<:]]12345[[:>:]]'\"";

String patternValue = pattern.replaceAll("'","\\\\");

因此,当字符串被包裹在“”中时,字符串变成\"location\":\"[[:<:]]12345[[:>:]]\"了 \ 在 mysql 中用作“的转义字符”


推荐阅读