繁体   English   中英

使用NamedParameterJdbcTemplate,如何从SQL Server检索与正则表达式模式列表匹配的记录集

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM