Java 용 SQL 파서 라이브러리


141

SQL 문을 구문 분석하기위한 오픈 소스 Java 라이브러리가 있습니까?

가능하면 벤더별 구문 (예 : Oracle 테이블 스페이스 정의 또는 MySQL의 LIMIT 절)을 구문 분석 (또는 적어도 무시) 할 수있을 정도로 사용자 정의 가능하거나 유연해야합니다.

그렇지 않으면 SQL 표준을 엄격하게 준수하는 것입니다.

업데이트 : 나는 두 가지를 위해 이것을 필요로한다 :

  • 비 SQL 데이터베이스에 SQL 인터페이스 제공 (내부 API 호출로 맵핑)
  • 실제 데이터베이스로 가기 전에 SQL을 다시 작성 (예 : Oracle)

109
이 질문은 어떻게 건설적이지 않습니까? 무슨 일이야, Stackoverflow?
anton1980

11
이 질문은 다시 열어야합니다. 또한 Foundationdb.github.io/sql-parser
kervin

2
이는 주제를 벗어난 것입니다. 라이브러리, 도구, 자습서 및 기타 오프 사이트 리소스에 대한 요청은 StackOverflow에 대한 주제로 간주되지 않습니다.
Toby Speight

나는이 다른 SE 사이트에 요청해야한다고 생각
peterchaula

4
이 질문은 건설적인 것 같아요 !!
Casualet

답변:


51

ANTLR3 에는 사용 가능한 ANSI SQL 문법이 있습니다. 이를 사용하여 자신의 파서를 만들 수 있습니다.

ANTLR4에는 SQL 문법이 있습니다.


5
자체 파서 생성기를 구현할 수 있는데 왜 ANTLR을 사용합니까?
IAdapter

127
ANTLR을 사용할 수 있는데 왜 자체 파서 생성기를 생성합니까?
duffymo

Antlr SQL Grammar를 사용하여 이러한 쿼리를 구문 분석하는 방법에 대한 링크가 있습니까? Lexers와 Parsers뿐만 아니라 일부 PL / SQL Parsers의 문법을 보았지만 사용 방법을 알 수 없었습니다. 모든 링크를 부탁드립니다.
Abhishek

문법을 ANTLR에 전달하면 컴파일하고 실행할 lexer / parser 클래스를 뱉어냅니다. 내가 생각할 수있는 최고의 소스는 ANTLR 참조입니다 : amazon.com/…
duffymo

우리는 지금 ANTLR 4입니다. 이전 문법은 새 버전에서 실행되지 않을 수 있습니다.
duffymo

34
  • JSqlParser
  • Presto의 구문 분석기 는 ANTLR4를 사용하여 작성되며 구문 분석기에서 빌드 된 자체 변경 불가능한 AST 클래스를 갖습니다. AST에는 방문자와 예쁜 프린터가 있습니다.

Statement statement = SQL_PARSER.createStatement (query)가있는 경우 Presto에 대한 질문이 있습니다. 쿼리 본문 (예 : Select, From, Where 등)을 어떻게 얻을 수 있습니까?
쿼크

문장은 기본 클래스입니다. SELECT 문은 Query 유형입니다. 서브 클래스 QuerySpecification이있는 QueryBody를 포함합니다. UNION, TABLE, VALUES, 설정 조작 등을 지원하기 위해 예상보다 구조가 복잡합니다. AstVisitor 또는 DefaultTraversalVisitor를 확장하여 방문자를 작성할 수 있습니다. 트리를 걷는 방법에 대한 예제는 SqlFormatter를 참조하십시오.
David Phillips

Presto를 사용하여 주어진 쿼리에서 쿼리 트리 구조를 가져올 수 있습니까?
MockedMan.Object

당신이 무엇을 요구하는지 잘 모르겠습니다. 좀 더 자세하게 새로운 질문을 만들 수 있습니까?
David Phillips

9

파서

파서가 필요한 경우 Apache Derby 의 코드베이스에 파서가 있어야합니다 .

공급 업체별 SQL 처리

jdbc Connection 객체 에서 .native () 메소드를보고 공급 업체 중립 쿼리를 전달하여 공급 업체별 쿼리로 후 처리 할 수 ​​있습니다.


그 native () 메소드는 흥미로워 보입니다. 어떻게 사용할 수 있는지에 대한 예가 있습니까? 어떤 종류의 변환이 가능합니까?
Thilo

@Thilo 예 : SQL Server 2014, nativeSQL Method (SQLServerConnection) : "이 방법은 현재 SQL Server 용 Microsoft JDBC 드라이버에서 지원되지 않습니다."
Gerold Broser

@Thilo OJDBC의 OracleConnectionWrapper 는 그것을 지원하는 것처럼 보입니다.
롤드 (Gerold) Broser


5

Zql 사용해 보기


4
zql은 기본 쿼리에는 적합하지만 join 문이 포함 된 쿼리를 구문 분석하려고하면 문제가 발생합니다. 그래서 나는 그것을 제안하지 않습니다
zato

3

Hibernate는 SQL과 hql 파싱을 위해 ANTLR을 사용한다.

JSqlParser도 좋은 옵션입니다 .Oracle pl / sql을 구문 분석하는 동안 몇 가지 버그 (또는 일부 기능은 구현되지 않음)가 있지만. 자세한 내용은 포럼을 참조하십시오.

따라서 Oracle pl / sql을 구문 분석하는 경우 ANTLR이 권장됩니다.


btw, anltr은 BSD에 있습니다.
한 정

2

구문 분석 된 SQL로 무엇을 하시겠습니까? Lex / Yacc ( BYACC / J , Java Cup 의 몇 가지 Java 구현을 권장 할 수 있습니다.기존 SQL 문법을 사용할 수 )를 권장 할 수 있습니다.

결과 구문 분석 문법으로 실제로 무언가를하고 싶다면 Java로 작성된 오픈 소스 SQL 데이터베이스 인 Derby를 살펴 보는 것이 좋습니다 .


Derby에서 사용되는 SQL 파서는 독립 JAR로 사용 가능합니까?
Lluis Martinez

1
모르겠어요 나는 더비의 소스를 본 적이 없다.
Thomas Jones-Low

1
이제이 질문에 대한 답을 알고 있습니다. 아니요. Derby 용 SQL 파서는 별도의 프로젝트가 아닙니다. 더비 이외의 용도로 사용하려면 분리해야합니다.
Thomas Jones-Low

1
나는 10 년 후에 다시 돌아왔다 :-)
Lluis Martinez
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.