Case1. 쿼리의 시작과 종료위치 찾기

Study/Java 2018. 10. 30. 05:37 Posted by meanoflife
반응형

Case1. 쿼리의 시작과 종료위치 찾기



쿼리 파싱을 위해 가장 먼저 할 일은 쿼리의 시작지점과 종료지점을 찾는 것이다.


우선, 현재 예시로 사용하는 쿼리의 경우

시작지점은 "SELECT"문이 될 것이고, 종료지점은 ";"이 될 것이다.


BufferedReader로 읽은 쿼리정보에서 String.contains()으로 각 문자열을 찾는다.



■ 1단계


- 읽어들인 라인에 "SELECT" 문자가 있는지를 체크하여 시작라인을 찾는다.

- 읽어들인 라인에 ";" 문자가 있는지를 체크하여 시작라인을 찾는다.


※ String.contains( "찾을 문자열" ) : 문자열에 {찾을 문자열}이 포함되었는지를 체크한다. ( true/false return )


Case1. Query


Coding

int iQueryLine = 0;

while( ( strLine = br.readLine() ) != null ) {
	iQueryLine++;
	
	// Query의 시작지점 찾기
	if( strLine.contains( "SELECT" ) ) System.out.println( "Query 시작라인 : " + iQueryLine );
	
	// Query의 종료지점 찾기
	if( strLine.contains( ";" ) ) System.out.println( "Query 종료라인 : " + iQueryLine );
}


결과

Query 시작라인 : 3
Query 시작라인 : 13
Query 종료라인 : 21



■ 2단계


위의 결과에서 보듯이 "시작라인"이 2회 출력이 되었다.

쿼리 중간에 있는 Inner Query의 SELECT문까지 추출이 되었기 때문이다.

이런 문제를 해결하기 위해서, 그리고 이후 추출을 위해서도 시작과 종료에 대한 bit관리가 필요할 것 같다.


시작 및 종료를 관리하는 Bit를 추가해 보자.


Coding


결과

Query 시작라인 : 3
Query 종료라인 : 21

위와 같이 boolean변수를 이용하여 시작과 종료 flag를 추가하였다.



P.S

글을 작성할때 직접 코딩을 하면서 진행하고 있는데, 

코딩을 하는 시간보다 블로그에 글을 쓰고, 이미지를 만들고 하는게 훨씬 더 시간이 많이 걸리는 것 같다.

Copy&Paste를 위해 코딩 내용도 이미지가 아닌 텍스트로 올리고 싶지 않은데,

그냥 문자를 복&붙하면 너무 이상하게 보이고, 테이블 태그안에 붙여넣으려니 잘 붙여지지가 않아 HTML을 수정해야 하고...

뭔가 효율적인 방법이 없을까... 고민이다.  다른 분들은 어떻게 하시는지...


노하우가 있으신 분은 공유 좀 부탁드립니다. plz~

혹, 문서파일로 만들고, 문서 내용을 그대로 (문서의 서식포함) 보여주는 기능은 없을지...




반응형