상황

jsqlparser 의 option 이 Unicode 입력이 불가하게 설정되어서 한글 입출력이 안 됨.

 

조치

  1. src/main/javacc/JSqlParserCC.jj 를 열어서 다음 내용을 추가

    options{
        IGNORE_CASE=true ;
        STATIC=false;
    //  DEBUG_LOOKAHEAD= true ;
    //  FORCE_LA_CHECK=true;
    //  DEBUG_TOKEN_MANAGER=true;
    }
    options{
        IGNORE_CASE=true ;
        STATIC=false;
        UNICODE_INPUT = true;
    //  DEBUG_LOOKAHEAD= true ;
    //  FORCE_LA_CHECK=true;
    //  DEBUG_TOKEN_MANAGER=true;
    }
  2. javacc 로 compile 한다
    1. mvn javacc:javacc
  3. JavaCC 로 생성된 .java 파일은 target\generated-sources\javacc\net\sf\jsqlparser\parser 에 위치한다. src 에 복사한다.
    1. copy target\generated-sources\javacc\net\sf\jsqlparser\parser\*.java src\main\java\net\sf\jsqlparser\parser
  4. mvn clean package 로 UNICODE 지원하는 jsqlparser artifact를 생성한다.
  5. 기존 jsqlparser 를 대신해서 한글이 들어간 SQL 문이 이상없는지 확인해 본다.

    import java.io.StringReader;
    import net.sf.jsqlparser.parser.CCJSqlParser;
    import net.sf.jsqlparser.parser.ParseException;
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
    
    public class utf8ParsingTest {
    	@Before
    	public void setUp() throws Exception {
    	}
    	@After
    	public void tearDown() throws Exception {
    	}
    	@Test
    	public void select() throws ParseException {		
    		String sql = "select * from tbl where col1 = '한글 테스트';";
    		
    		StringReader statementReader=new StringReader(sql);
    		
    		CCJSqlParser parser = new CCJSqlParser(statementReader);
    		
    		parser.Statement();				
    	}
    	@Test
    	public void jsql() throws ParseException {		
    		String sql = "insert into tbl (col1, col2) values('똠방각하', 2  );";
    		
    		StringReader statementReader=new StringReader(sql);
    		
    		CCJSqlParser parser = new CCJSqlParser(statementReader);
    		
    		parser.Statement();				
    	}
    }
    
    

 

빌드가 귀찮으면 첨부한 파일(jsqlparser-0.8.0-unicode.jar)을 기존 jsqlparser 를 대체해서 사용

 

Ref

 





blog comments powered by Disqus