![](/img/trans.png)
[英]How to get list of patterns match in regex using str.contains?
[英]Using NamedParameterJdbcTemplate, how to retrieve record sets from sql server that match a list of regex patterns
我是spring框架的新手。 我正在尝试使用与多个模式匹配的NamedParameterJdbcTemplate从SQL Server 2005数据库表中检索记录集(模式存储在ArrayList中)。
以下代码检索与一组值匹配的记录集:
List<String> valuesForBuildingPatterns1 = getValuesForBuildingPatterns1();
List<String> valuesForBuildingPatterns2 = getValuesForBuildingPatterns2();
String sqlQuery = "SELECT * FROM sqlServerTable col1 IN (:pattern1) AND col2 IN (:pattern2)";
MapSqlParameterSource params = new MapSqlParameterSource();
params.addValue("pattern1", valuesForBuildingPatterns1);
params.addValue("pattern2", valuesForBuildingPatterns2);
resultset = namedParameterJdbcTemplate.query(sqlQuery, params, new MyRowMapper());
问题:我不想搜索字符串值列表,而是要搜索正则表达式模式列表(例如%xyz%) 。 但是我无法在SQL查询中同时使用“ IN”子句和“ LIKE”运算符,如下所示:
List<String> pattern1 = new ArrayList<String>();
List<String> pattern2 = new ArrayList<String>();
for(String str : valuesForBuildingPatterns1)
pattern1.add("%"+str+"%"); //If str="xyz", it adds "%xyz%" to the new list
for(String str : valuesForBuildingPatterns2)
pattern2.add("%"+str+"%");
String sqlQuery = "SELECT * FROM sqlServerTable col1 IN LIKE (:pattern1) AND col2 IN (:pattern2)";
MapSqlParameterSource params = new MapSqlParameterSource();
params.addValue("pattern1", pattern1);
params.addValue("pattern2", pattern2);
resultset = namedParameterJdbcTemplate.query(sqlQuery, params, new MyRowMapper());
我还尝试遍历列表并单独使用不带“ IN”子句的“ LIKE”运算符来构建SQL查询。但是query()方法不接受。 此外,我猜想,像这样构建SQL查询要达到使用NamedParameterJdbcTemplate的主要目的。
for(String str1 : valuesForBuildingPatterns1)
for(String str2 : valuesForBuildingPatterns2)
{
String sqlQuery = "SELECT * FROM sqlServerTable col1 LIKE " + str1 + " AND col2 LIKE " + str2";
resultset.add(namedParameterJdbcTemplate.query(sqlQuery,null,new MyRowMapper()));
}
您能指导我解决这个问题吗? 请告诉我们是否需要更多信息,请原谅我的无知,因为对框架了解不多。 非常感谢。 非常感谢您的帮助。
PS:正在使用我所工作的组织开发的内部工具来开发项目。 该工具基于Spring框架构建,因此支持Spring框架提供的所有服务。
我想出了一种方法来实现它。 多谢你们。
StringBuilder sb = new StringBuilder();
for(String str1 : valuesForBuildingPatterns1)
for(String str2 : valuesForBuildingPatterns2)
sb.append(" col1 LIKE '%" + str1 + "%' AND col2 LIKE '%" + str2 + "%' OR");
sb.delete(sb.length()-2, sb.length());
String sqlQuery = "SELECT * FROM sqlServerTable WHERE" + sb.toString();
resultset = namedParameterJdbcTemplate.query(sqlQuery, params, new MyRowMapper());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.