2017-03-14 2 views
0

array of String이라는 간단한 코드를 작성하고 ? 표지를 각 배열 요소로 대체해야합니다.부호 세트를 문자열로 대체하는 더 나은 방법

여기의 JUnit의 테스트 케이스이다 :

@Test 
    public void QueryFitterTest() { 

     ArrayList<String> args=new ArrayList<String>(); 

     args.add("Bad code"); 
     args.add("The code is buggy"); 

     String res = QueryMaker.queryFitter("insert into vulnerability (name,descirption) values(?,?)",args); 
     String correctQuery="insert into vulnerability (name,descirption) values(Bad code,The code is buggy)"; 
     assertEquals(correctQuery, res); 

    } 

여기에 코드입니다 : 내 접근 방식을 좋아하지 않는다

public static String queryFitter(String query, ArrayList<String> args){ 

    String[] colapsedQuery = query.split(""); 
    int parmNum=0; 
    for(int i=0;i<colapsedQuery.length;i++){ 
     if(colapsedQuery[i]=="?"){ 
      colapsedQuery[i]=args.get(parmNum); 
      parmNum++; 
     } 

    } 

    query=concatenator(colapsedQuery); 
    return query; 

} 
public static String concatenator(String[] colapsedQuery){ 
    String delimiter = ""; 
    String result = String.join(delimiter, colapsedQuery); 
    System.out.println("query is: "+result); 
    return result; 
} 

코드가 작동이 잘하지만

, 그것을하는 쉬운 방법이 있습니까?

1 내 코드가 어떤 변화없이 쿼리를 반환, 시험을 통과 할 수 없습니다

+2

tl; dup :'colapsedQuery [i] == "?"'는 결코 사실이 아닐 것입니다. – azurefrog

+1

'colapsedQuery [i] == "?"'. –

+3

이것이 SQL에 반대한다면, IMO의 "더 나은"방법은 PreparedStatement를 사용하는 것입니다. 입력에 특수 문자가 있으면 어떻게 될까요? – KevinO

답변

0

2 문제가 있습니다.

쿼리는 다음과 같습니다 (?) 취약점에 (이름, descirption) 값

내 접근 방식을 좋아하지 않는다

2 , 그것을 할 수있는 쉬운 방법이 존재입니까?

글쎄, 좋은 소식은 귀하의 JUnit 테스트가 프로그램에서 버그를 발견했기 때문입니다. 다른 좋은 소식은 귀하의 질문에 대한 답변이 모두 동일하다는 것입니다. 코드 queryFitter에 코드를 수정하십시오.

다음 코드를보십시오 :

public static String queryFitter(String query, ArrayList<String> args){ 

    for(int i=0;i<args.size();i++){ 
     query = query.replaceFirst("\\?",args.get(i)); 
    } 

    return query; 
} 

은 거의 당신에게 잊어 버렸습니다. 당신은 concatenator 방법을 필요로하지 않습니다.

+0

감사합니다. – Salman