2013-08-14 2 views
2

각 접근법에는 장단점이 있지만 SQL 문을 넣을 위치는 무엇입니까? 저는 항상 자바 클래스 안에 넣었지만, 스프링 문자열 생성자를 통해 주입되는 프로젝트를 시작했습니다. 이유는 SQL 문이 응용 프로그램 컨텍스트에있는 경우 "and +"를 모두 제거하여 서버에서 복사/붙여 넣기 할 SQL을 가져올 필요가 없기 때문입니다. 그 순간에 내가 밟은 것입니다. 이것도 속성을 사용하여 수행 할 수 있습니다.Java에서 SQL 문을 넣을 수있는 최적의 장소

내 질문에 SQL 문을 응용 프로그램 컨텍스트, Java 파일, 속성 파일 또는 일부 장소에서 이동해야합니다. ?

생각하고 있지 않다

업데이트 : 내가 가진 응답에서

, 준비된 문이 최고의 놀이터 것 같다 SQL 문의 경우. 그러나 동적으로 생성되는 SQL 문은 어떨까요? 코드에는 전달되는 항목에 따라 쿼리를 만들기 위해 모두 여러 문자열을 연결해야합니다. 전달할 수있는 6 개의 입력 매개 변수가있는 메서드가 있으면 (또는 포함하지 않을 경우) 엄청난 양의 모든 가능성을 설명하기 위해 준비된 진술.

나는 Hibernate와 같은 ORM 도구를 사용하는 것을 고려해 봤지만, 나는 iSeries 데이터베이스로 작업하고 있으며 테이블은 잘 구성되어 있지 않다. 어쩌면 언젠가 나는 Hibernate를 다시 쓰고 900 행의 SQL 문을 작성할 수 있지만 한 번에 한 단계 씩 진행할 수있다.

+1

저장 프로 시저에서. – SQLMason

+0

우선, 항상 미리 컴파일 된 문 (PreparedStatements)을 사용해야합니다. 이렇게하면 모든 쿼리는 일반적으로 매개 변수가있는 고정 문자열이 될 수 있습니다. 삽입하지 않거나 삽입하지 않으면 쿼리를 수정하면 코드를 변경해야 할 수도 있으므로 특정 케이스의 필요 (비 기능적 requierements)가 무엇인지 물어볼 것입니다. 이렇게하면 쉽게 제공 할 수 있습니다. 어떤 객관적인 대답. – Martin

답변

1

"집에서 열쇠를 집어 넣는 가장 좋은 장소는 어디"와 같은 가장 좋은 장소는 어디 까지나 규칙이 없습니다.

프로젝트가 필요하면 응용 프로그램 외부에서 SQL에 액세스 할 수 있어야합니다. 그런 다음 속성 파일에 저장하지 않는 것이 좋습니다. 이 경우 일부 JUnit 테스트를 수행하여 Sql의 변경 사항이 앱과 계속 호환되는지 확인할 수 있습니다.

저장 프로 시저의 실행 속도는 좋지만 앱 구성을 두 곳에서 분리했기 때문에 저장 프로 시저가 좋았습니다. 또한 그들은 데이터베이스 소프트웨어와 밀접하게 결합되어 있습니다 (다시 프로젝트에 따라 좋거나 나쁨이 될 수 있습니다).

희망 사항은 내 자신의 상황에 맞는 질문을하는 데 도움이 되었기를 바랍니다.

최고 감사합니다, Zied

1

그게 유일한 이유는 아닙니다. SQL 문이 Java 코드의 외부에 있으면 응용 프로그램을 다시 컴파일하고 전개 할 필요없이 SQL 문을 변경할 수 있습니다. 쿼리가 파일에서 주기적으로로드되면 (예 : 8 시간마다 한 번씩) 서버를 다시 시작할 필요조차 없습니다. 그것은 생산 애플리케이션 지원을하는 사람들에게 매우 유익 할 것입니다.

또한 첫 번째 이유에 대해서는 충분한 이유를 고려하지 않았습니다. 큰 엉덩이 SQL 문을 디버깅해야하고 쿼리 실행자에 붙여 넣어야합니다. 모두 + 및 '' '기호를 제거하면 마음이 바뀔 것입니다 :-)

+0

+와 함께 거대한 SQL 문을 디버깅해야했지만 고통 스럽습니다. 디버깅을 통해 변수에서 SQL을 가져올 수있는 몇 가지 JUnit 테스트를 설정 했으므로 관계없이 그 날짜가 사라졌습니다. SQL의 위치 – bMcNees

3

Thiharas 대답에 동의하지만 그 이유는 무엇입니까? 한 단계 더 나아가 응용 프로그램 내 .sql 파일에 저장하지 마십시오. 각 파일에 고유 한 파일이 있으므로 관리하기가 더 쉬워집니다. Hibernate와 같은 ORM 프레임 워크가 응용 프로그램에 적합하지 않은 경우 물론 당연합니다.

+0

내 문제는 내가 구축 할 수있는 SQL의 조합이 너무 많아서 스토어드 프로 시저에 모두 넣기가 어렵다는 것입니다. SQL은 메소드가 호출 될 때 Java String Concatenation을 통해 생성됩니다. 이 시스템은 완벽 할 것입니다 ... 그러나 그것은 레거시 시스템 (iSeries 데이터베이스)입니다. 언젠가는 한 번에 한 단계 씩 나아갈 필요가 있습니다. – bMcNees

+0

Prepared Statement로 SQL 파일을 사용할 수 있습니까? – cowls

관련 문제