JDBCTemplate queryForMap 比较和替换提取行中的值

JDBCTemplate queryForMap compare and replace value in extracted lines

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

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

提前致谢。这是代码:

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;
        }
    }
  }
}

对于你的第二个问题,我得到了一个更具可读性和可修改性的解决方案。 (我仍然不确定你的第一个是什么)

使用正则表达式和模式你可以实现你想要的替换。

假设您要搜索文本 "blocE" 后跟 15 个字符,同时搜索 rs.getString("K_PARAM") 中包含的文本加上“#”

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

"(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.

的数量