2012-09-14 4 views
3

클래스에서 SQL 문을 문자열로 작성하지 않으려면 동일한 패키지에 파일을 .sql으로 배치하고 정적 생성자의 문자열로 내용을 읽으십시오. 그 이유는 SQL이 쿼리하는 ERP 시스템 때문에 SQL이 매우 복잡하기 때문입니다.Embedded SQL 리소스 파일을 읽을 수있는 명확한 방법이 있습니까?

비록 SQL 읽기 메커니즘이 전체 파일을 읽는 단순한 기능을하기 때문에이 파일의 주석은 줄 끝 부분에있을 경우 읽기를 실패하게 만들 수 있기 때문에이 방법에는 아무런 문제가 없습니다 여분의 공백을 제거하고 줄 바꿈을 제거합니다. 전체 주석 처리 된 행 (즉, --으로 시작하는 행은 제거됨)

SQL 파일을 읽고 정리할 수있는 것이 있는지 이미 궁금해하고 있지만 필자는 파일을 읽고 주석이 달린 줄 등을 읽도록 단순 읽기를 향상시킬 수있었습니다.

+0

아무 래도 유사 : http://stackoverflow.com/questions/660609/sql-parser-library-for-java – zeller

+4

왜 물건을 정리해야합니까? 줄 바꿈을 제거하면 주석이 손상 될 수 있지만 단순히 데이터베이스 엔진에 쿼리를 전달하지 않는 것이 좋습니다. 그렇게하면 오류 메시지에 의미있는 줄 번호가 표시됩니다. – MvG

+0

그것은 유효한 포인트 MvG입니다. 그러나 형식화 된 이러한 SQL 문 중 일부는 크기가 매우 커서 어떤 경우에는 100 행이 넘고 길이가'left join'과 중첩 된'case' 문으로 인해 공백이 많이 있습니다. 선택 "진술을 잘 정리하여 저장해야한다. 우리의 RDBMS (OpenEdge)는 또한 오류에 행 번호를 제공하지 않으며 오류에 줄 바꿈없이 실제로 모든 오류를 식별하는 것을 어렵게 만드는 모든 공백을 포함합니다. 다른 경우에도 귀하의 포인트는 유효합니다. –

답변

0

XML에서 쿼리를 저장하고 XML을 런타임에 사용자 지정 StoredQueriesCache 개체로로드하여이 같은 문제를 해결 한 프로젝트를 보았습니다. 쿼리를 얻으려면 StoredQueriesCache 개체에서 메서드를 호출하고 쿼리 이름 (XML에 정의되어 있음)을 전달하면 쿼리가 반환됩니다.

이런 식으로 작성하는 것은 매우 간단합니다. XML은 아래와 같이 표시됩니다.

<Query> 
    <Name>SomeUniqueQueryName</Name> 
    <SQL> 
    SELECT someColumn FROM someTable WHERE somePredicate 
    </SQL> 
</Query> 

모든 저장된 쿼리에 대해 하나의 요소가 있습니다. XML은 파일에서 응용 프로그램을 시작할 때 메모리에로드되거나 필요에 따라 파일에서 지연로드 될 수 있습니다. 그런 다음 XML을 보유하는 StoredQueriesCache 오브젝트에는 이름으로 개별 u 리를 리턴하는 메소드가 있습니다. 내 경험상, 줄 바꿈은 XML 노드의 innertext의 일부이기 때문에 쿼리에 주석을 달아 본 적이 전혀 없으므로 쿼리를 검색하는 StoredQueriesCache 메서드를 사용하여 주석을 구문 분석 할 수 있습니다.

나는 이것을 코드에 내장하지 않고 저장 프로 시저를 사용하지 않고 저장하는 가장 체계적인 방법이라는 것을 알았습니다. 솔직히 당신을 위해 이것을하는 도서관이어야합니다. 어쩌면 내가 쓸거야!

+0

좋은 생각입니다. IDE에서 SQL의 유효성을 검사 할 수있는 능력을 잃어 버리고 테스트 쿼리를 단독으로 실행하지 못하게됩니다. 나는 현재 프로젝트에서 내장 된 SQL 리소스 파일을 사용한다. 리소스 파일을로드 할 때 줄 주석을 제거하지만 줄 끝 부분에 주석이 있으면 SQL Server (OpenEdge)가 오류를보고하는 데 좋지 않기 때문에 줄 바꿈을 제거합니다. 줄 바꿈. –

관련 문제