2017-05-19 26 views
0

私のコードが機能しない理由を理解できたら助かりますか?JDBCTemplate queryForMapは、抽出された行の値を比較して置き換えます。

データベースから2列の値を取得し、K_PARAMが自分のキーでL_PARAMが自分の値であるハッシュマップに値を格納しようとしています。次に、私が抽出している行から2文字を比較して、これらの2文字がキーに等しいかどうかを確認したいと思います。それらが等しければ、キーに置き換えます。

ありがとうございます。これはコードです:

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

あなたの正確な問題は何ですか?より具体的にする必要があります。あなたのコードを置き換えることは理解しにくいです。ある種のパターンがあれば、少なくともコードを単純化し明確にするために正規表現を使うことができます。 – RubioRic

+0

実際には、問題はハッシュマップとメソッドの後にあります。もしjavaが私のコンストラクタを再調整しなければ、これは私のデータプロセッサにあります。次にラインをパースし、2のcaractereをハッシュマップの値に置き換えます。 –

+0

2つの問題があります(1)データはDBにありますが、ハッシュマップには格納されておらず、(2)置換も機能していません。私はあなたがこのような何かをしようとしていると思う********** blocE ***** KEY ****** - > ********** bloc ** *** VALUE ******これはより効率的な方法で達成することができます。この情報を含めるには、質問を編集する必要があります。 – RubioRic

答えて

0

私はあなたの2番目の問題のためのより読みやすく、変更可能な解決策を得ました。 (私はあなたの最初のものはまだよく分かりません)

正規表現とパターンを使用すると、必要な置換を行うことができます。

のは、あなたが15個の文字に続いて「blocE」は、私たちは、あなたがパターンとして検索するものをモデル化することができrs.getString("K_PARAM")に含まれるテキストに加えて、「#」

によって同時に続くテキストを検索していると仮定しましょうこのように

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

括弧で正規表現に異なるグループを設定することができます。

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

完全一致式であること。

はこれを知って、あなたのパターンが変化した場合、次のコードに

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

を適用し、交換を行うことができ、あなただけの1行を変更する必要があり、あなたはindexOfのような量を心配する必要はありません。

関連する問題