2012-06-25 3 views
0

자바의 데이터베이스 쿼리의 절은 어디에서 main의 인덱스를 얻고 싶습니까? 어떻게 이것을 Regex로 처리 할 수 ​​있습니까? 쿼리의 주된 부분을 가져 오십시오

내가 두 번째 싶어이 쿼리에 예를 들어 WHERE 절 : "("문자 ")"문자의 수는 그 후 동일하다입니다
select u.id, (select x.id from XEntity where x.id = 200) 
    from UserEntity u 
    **where** u.id in (select g.id from AnotherEntity g where g.id = 100) 

내가 주를 생각합니다. 하지만이 정규식을 어떻게 얻을 수 있는지 모르겠습니다. 베스트 감사합니다

+0

왜이 작업을 수행 하시겠습니까? – Tomalak

+3

구조가 아닌 WORDS를 인식하는 데 정규식을 사용하십시오. http://kore-nordmann.de/blog/do_NOT_parse_using_regexp.html –

답변

0

Toote와 David Brabant가 말한 것은 절대적으로 정확합니다. SQL을 파싱하는 것, 특히 정규 표현식만을 사용하는 복잡한 SQL은 매우 어려운 문제입니다.

Java의 SQL 구문 분석 측면에서 귀하의 질문의 핵심 인 것으로 보입니다. 매우 양호한 (유지 관리되지 않은 경우) 라이브러리 called JSQLParser이 있습니다. 이 라이브러리의 최신 버전은 Github here에서 찾을 수 있습니다 (면책 조항 : 이것에 아주 조금 기여했습니다). 기본 페이지는 AST here의 출력을 소비하도록 설계된 방문자의 예를 보여줍니다.

ANTLR available in it's grammar list에 대한 문법도 있습니다. 또는 모험을 느끼는 경우 H2 데이터베이스는 MySQL과 같은 독점 기능을 포함하여 광범위한 SQL을 지원합니다. Parser을 수정하여 필요한 정보를 추출하기위한 적절한 구조를 생성 할 수 있습니다.

0

정규 표현식으로

는 SQL 쿼리가 될 수있는 복잡한 구조를 인식에서 매우 잘되지 않습니다. 주로 SQL은 컨텍스트 프리가 아니기 때문에 실행중인 문제와 정확히 일치합니다. WHERE는 많은 곳에서 나타날 수 있으며 특히 쿼리의 전체 구조에 따라 달라지기를 원합니다.

적절한 파서가 필요합니다. only JavaScript SQL parser I could find은 그다지 완벽하지는 않지만 필요에 맞게 제작하여 언제든지 개발할 수 있습니다.

관련 문제