본문 바로가기

백엔드/Java

[Java] java.lang.IndexOutOfBoundsException: No group 2

데이터베이스에 값을 입력하는 중 에러가 발생했다...
정확히는 SQL과 파라미터를 조합해 로그를 찍어주는 곳에서... 

처음 보는 에러네?
로그...
### Error updating database.  Cause: java.lang.IndexOutOfBoundsException: No group 2

에러를 발생한 값...
2018-10-14 20:15 [DEBUG] ******* field value : {bcrypt}$2a$10$Rq1GlJlTVLXL/9GQLohX6.YGkn/yAHa.ZSOLekODrY.wVjTDvE1Sy

비밀번호를 암호화 하게되면 $가 문자열에 포함되게 되는데 이 $가 replace 쪽에서 문제를 일으키는 것... 
이럴 땐 좀 복잡하지만 돌아가야 한다...

public class ReplaceTest {
    public static void main(String[] args) {
         String sql = "This is password : ?";
         HashMap<String, String> field = new HashMap<String, String>();
         field.put("passwd", "{bcrypt}$2a$10$2ZnW3nw1AVN1jyKpa3uZJO0EhJ71jXDyahxbHTmlBu5MTsLPN3no2");
         
         String regex = "\\?";
         Pattern pattern = Pattern.compile(regex);
         Matcher matcher = pattern.matcher(sql);
         sql = matcher.replaceFirst(matcher.quoteReplacement("'" + field.get("passwd") + "'"));
         System.out.println(sql);
    }
}
result : This is password : '{bcrypt}$2a$10$2ZnW3nw1AVN1jyKpa3uZJO0EhJ71jXDyahxbHTmlBu5MTsLPN3no2' 






'백엔드 > Java' 카테고리의 다른 글

Couldn't connect to host, port: localhost, 25; timeout -1  (0) 2019.04.24