Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将NamedJdbcTemplate与Postgres正则表达式一起使用_Java_Regex_Postgresql_Java 8_Spring Jdbc - Fatal编程技术网

Java 如何将NamedJdbcTemplate与Postgres正则表达式一起使用

Java 如何将NamedJdbcTemplate与Postgres正则表达式一起使用,java,regex,postgresql,java-8,spring-jdbc,Java,Regex,Postgresql,Java 8,Spring Jdbc,我正在使用Postgres:9.5.5和SpringJDBC:4.3.7 我在postgres中的选择如下所示: select id, birth_date, fullname from some_table where fullname ~ '\mSTACK\M' 如果fullname包含单词“STACK”,则返回true 使用NamedJdbcTemplate在Java(8)中生成此查询时遇到问题: String sql = "select id, fullname, birth_date

我正在使用Postgres:9.5.5和SpringJDBC:4.3.7

我在postgres中的选择如下所示:

select id, birth_date, fullname from some_table where fullname ~ '\mSTACK\M'
如果fullname包含单词“STACK”,则返回true

使用NamedJdbcTemplate在Java(8)中生成此查询时遇到问题:

String sql = "select id, fullname, birth_date from some_table where fullname ~ '\m:name\M' and birth_date = :birth_date";

SqlParameterSource params = new MapSqlParameterSource()
    .addValue("name", "STACK")
    .addValue("birth_date", "22.07.2002");

namedJdbcTemplate.query(sql, params, ....);
JDBC生成的结果SQL:

SELECT id, fullname, birth_date FROM some_table WHERE fullname ~ '\m:name\M' AND birth_date = ?;
如您所见,出生日期参数没有问题, 但JDBC并没有将“?”字符而不是参数“:name”

我如何向JDBC解释我的参数“:name”被正则表达式包围


谢谢

'\m:name\m'
此结果是逻辑结果,因为您在两个引号之间使用正则表达式和参数

可以使用
|
将正则表达式与单词连接起来,如下所示:

fullname ~ ('\m' || :name || '\M')
fullname ~ '\mSTOCK\M'
如果
:name
param等于
STOCK
这将产生如下结果:

fullname ~ ('\m' || :name || '\M')
fullname ~ '\mSTOCK\M'

谢谢,这就是答案!这几乎奏效了,我相信您还需要括号:fullname~('\m'| | |:name | |'\m')。不客气@EgorStepanov是的,这是正确的,我忘记了括号:)