java - 有没有办法在 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 有效负载列中的键值对获取记录。
解决方案
好的,在字符串中添加转义字符有帮助。
String pattern = "'\"location'\":'\"[[:<:]]12345[[:>:]]'\"";
String patternValue = pattern.replaceAll("'","\\\\");
因此,当字符串被包裹在“”中时,字符串变成\"location\":\"[[:<:]]12345[[:>:]]\"
了 \ 在 mysql 中用作“的转义字符”