簡體   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