2010-07-29 5 views
10

내 MySQL 서버에 이런 식으로 뭔가를 실행하고 싶습니다 :JDBC 준비 쿼리에서 여러 명령문을 사용할 수 있습니까?

SET @id=(SELECT id FROM lookupTable WHERE field=?); 
(SELECT * FROM table2 WHERE [email protected]) 
UNION 
(SELECT * FROM table3 WHERE [email protected]) 
UNION 
(SELECT * FROM table4 WHERE [email protected]); 

이 내 자바의 PreparedStatement에서 콘솔에서 잘 작동하지만. ';'에 구문 오류가있는 예외가 발생합니다. 문장 분리. 나는 lookup 절을 반복 할 필요가 없기 때문에 변수를 좋아하지만 필요하다면 다시 작성할 수 있습니다. 동등한 JOIN은 UNION 절에도 조금 어색합니다.

감사합니다, 그냥 (하나 개의 연결 이내) 두 개의 쿼리 등이 실행

+0

@ddimitrov가 말했듯이, 이것은 직접적으로 가능하지 않습니다. 나는'PreparedStatement.addBatch()'를 시도하지 않았다. 스토어드 프로 시저가이 작업에도 잘 작동합니다. –

+0

다른 공급 업체에 관심이 있으시면 CUBRID 데이터베이스가이 기능을 지원합니다. 이 포럼 게시물 http://www.cubrid.org/forum/534638을 참조하십시오. – Eye

답변

5

JDBC는 구분 된 쿼리 구문 분석을 지원하지 않습니다. 각각의 호출은 데이터베이스에 대한 하나의 트립입니다. 아마도 각 개별 쿼리에 대해 PreparedStatement.addBatch()를 수행하는 의미를 달성 한 다음 두 결과 집합을 실행 및 검색 할 수 있습니까?

2

여호수아는 당신에게 동일한 결과를 제공해야합니다.

+0

나는 네트워크 시간을 두 번 피하기를 바랬지 만 여기서는 피할 수없는 것처럼 보입니다. SQL 인젝션을 피하기위한 보안 기능 일 수 있습니다. –

+1

@Joshua, 서버에 쿼리를 배치하고 여러 네트워크 트립을 피할 수 있습니다. – ddimitrov

관련 문제