JDBCTemplate queryForMap比较和替换提取行

时间:2017-05-19 08:32:39

标签: java spring hashmap spring-jdbc

你能帮我理解为什么我的代码不起作用吗?

我试图从我的数据库的2列中获取值,并将它们存储在一个哈希映射中,其中K_PARAM是我的密钥,L_PARAM是我的值。然后我想比较我正在提取的一行中的两个字符,看看这两个字符是否等于我的密钥。如果它们是等号,我将替换为

提前致谢。这是代码:

if (action.equals("RP")) {
      if (marqueCarte = null) {
    jdbcTemplate.query(" select K_PARAM, L_PARAM from DLCOA.DLC_ADM_PARAMS where K_CHX_PARAM = '50'", new ResultSetExtractor<Map>(){
    @Override
    public Map extractData(ResultSet rs) throws SQLException,DataAccessException {
         HashMap<String,String> marqueCarte = new HashMap<String,String>();
            while (rs.next()) {
                  marqueCarte.put(rs.getString("K_PARAM"),rs.getString("L_PARAM"));

                  if (line.contains("blocE")) {
                      if (line.substring(line.indexOf("blocE") + 15, line.indexOf("blocE") + 15 + (line.substring(line.indexOf("blocE")+15)).indexOf("#")).equals(rs.getString("K_PARAM"))){
                         line = line.replace(line.substring(line.indexOf("blocE") + 15, line.indexOf("blocE") + 15 + (line.substring(line.indexOf("blocE")+15)).indexOf("#")),rs.getString("L_PARAM") );
                      }
                  }
            }

            return marqueCarte;
        }
    }
  }
}

1 个答案:

答案 0 :(得分:0)

我为您的第二个问题提供了更具可读性和可修改性的解决方案。 (我还不确定你的第一个是什么)

使用正则表达式和模式,您可以实现所需的替换。

我们假设您正在搜索文本&#34; blocE&#34;后跟15个字符,同时由rs.getString("K_PARAM")中包含的文字加上&#34;#&#34;

我们可以将您搜索的内容建模为像这样的模式

"(blocE)(.{15})(" + key + "#)"

括号允许我们在正则表达式中建立不同的组。

 Group 1 - blocE
 Group 2 - 15 characters
 Group 3 - key + #

将第0组作为完整的匹配表达式。

知道这一点,您可以使用以下代码进行替换

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TestRegex {

    public static void main(String[] args) {

        String key = "KEY";         // rs.getString("K_PARAM")
        String value = "VALUE";     // rs.getString("L_PARAM")

        Pattern pattern = Pattern.compile("(blocE)(.{15})(" + key + "#)");

        String input ="helloworldblocE111111111111111KEY#blocE111111111111111KEY";

        Matcher m = pattern.matcher(input);

        if (m.find()) {
            String text2replace = m.group(0);
            String replacement  = m.group(1) + m.group(2) + value;
            System.out.println(input.replaceFirst(text2replace, replacement));              
        }
    }
}

如果您的模式发生变化,您只需要更改一行,而不必担心indexOf的数量。