2014-03-13 2 views
2

이것은 내가 머리를 긁적 거리는 것입니다. 특히 다루기가 너무 힘들어졌습니다.Spring JDBCTemplate 항상 QueryTimeOutException이 발생합니다.

는 다음과 같은 코드를 생각해

String query = "UPDATE ORDERS SET VOLUME=?,CONTRACT_ID=?,PROJECT_ID=?,WORKSITE_ID=?,DROPZONE_ID=?,DESCRIPTION_ID=?,MANAGER_ID=?,DELIVERY_DATE=?,REVISION=REVISION+1) WHERE ID=?"; 
jdbcTemplate.update(query, orderEntity.getVolume(), orderEntity.getContractNo(), orderEntity.getProjectID(), orderEntity.getWorksiteID(), orderEntity.getDropzoneID(), orderEntity.getDescriptionID(), orderEntity.getManagerID(), orderEntity.getDeliveryDate(), id); 

우리는 SQL 쿼리가 잘못된 것을 볼 수있다 - 따라서 일부 SQL 오류가 발생합니다을하지만, 하나는 그것을 놓친 것. 봄은 (나를 위해) QueryTimeoutException을 던집니다. 나는 그걸로 일종의 일이지만 도움이되지 않습니다.

는 이제

String query = "INSERT INTO ORDERS(ID,REISION,CONTRACT_ID,PROJECT_ID,WORKSITE_ID,DROPZONE_ID,DESCRIPTION_ID,MANAGER_ID,VOLUME,DELIVERY_DATE) VALUES(?,?,?,?,?,?,?,?,?,?)"; 
jdbcTemplate.update(query, id, revision, etc); 

쉽게 놓친 것 또 다른 맞춤법 실수를 해보자 - 개정은 REISION로 철자가) 봄은 다시 또 다른 QueryTimeoutException가 발생합니다. 이것은 이제 내가 예외를 얻는다면 그것이 실제로 무엇인지 알지 못한다는 것을 의미합니다. 구문 오류입니까? 열 맞춤법 오류입니까? 외래 키 제약이 따르지 않는다는 사실을 (훨씬 더주의하기가 어렵습니까?) 사실입니까?

디버깅하는 동안, 이것은 아마도 가장 분노한 일입니다. 제가 아는 건 내 쿼리를 실행하지 못한 것입니다. 유용한 정보를 얻으려면 어떻게해야합니까? 내 pom.xml 파일에 추가하지 않은 내용이 있습니까?

편집 :

다음은 좋은 예입니다. id, REVISION 및 TEXT 열이있는 DESCRIPTIONS 테이블이 있습니다. 이들 모두는 null이 허용되지 않는 것으로 표시됩니다. MySQL의에 쿼리를 실행할 때 또한 쿼리 시간 제한의 예외가 발생합니다

DescriptionEntity descriptionEntity = new DescriptionEntity("newDesc", 1, null); 
String query = "INSERT INTO DESCRIPTIONS (ID,REVISION,TEXT) VALUES(?,?,?)"; 
jdbcTemplate.update(query, descriptionEntity.getID(), 1, descriptionEntity.getText()); 

은 정중하게 넣어, 이것은 나 ERROR 1048 (23000): Column 'TEXT' cannot be null

에게 약간의 고통을 준다.

+0

여기서 어떤 데이터베이스를 사용하십니까? –

+0

어떤 RDBMS를 사용하고 있습니까?해당 데이터베이스 환경에서이 SQL을 실행 한 결과는 무엇입니까? – woemler

+0

mysql을 사용합니다. 내가 출력물을 올릴 기회를 얻었을 때 – DrugCrazed

답변

0

이것은 아마도 내가 겪어 본 가장 바보 같은 오류입니다. 문제는 Maven이 모든 종속성을 해결하는 방법에있었습니다.

JDBC 보안 요구 사항은 JDBC 요구 사항보다 우선합니다. 이로써 스프링 시큐리티는 JDBC에 대한 의존성을 만족시키는 org.springframework:spring-tx:jar:3.0.7.RELEASE:compile을 풀다. JDBC 요구 사항을 위로 옮기는 것은 JDBC가 org.springframework:spring-tx:jar:3.2.2.RELEASE:compile으로 풀린 것을 의미합니다.

2

첫 번째 예에서는 맞춤법 오류가 아닙니다. 여는 괄호를 생략했습니다. 나는 이것이 Spring이나 JDBC의 문제는 아니라고 말할 것이다. 그러나 DB는 SQL을 처리하고 더 많은 입력이나 무언가를 기다리며 리턴하지 않는다.

두 번째 설명에서 나는 테이블 디자인을 알지 못해서 무슨 말을하고 있는지 잘 모르겠습니다. ID가 고유하지 않다는 걸 무슨 뜻으로 생각해야합니까? 다시 말하지만 Spring이나 JDBC, 아마 드라이브, 데이터베이스 서버 일 가능성이 높습니다.

많은 경우, SQL이 사용자 클라이언트 UI에서 처리되는 방식은 JDBC를 통해 처리되는 방식과 동일하지 않습니다. 예를 들어, SQL Server에서 SQL은 변수로 설정된 매개 변수로 전달 된 문자열로 설정되고 sp_executesql()을 사용하여 실행합니다. SQL Studio Manager 클라이언트를 통해 완벽하게 실행되는 보고서가 있었지만 쿼리 계획 최적화 프로그램이 SQL 실행 방법의 차이로 인해 다른 경로를 사용했기 때문에 실시간으로 실행했을 때 문제가 발생한 것을 발견했습니다.

+0

두 번째로, 지금 편집 된 실제 쿼리 라인을 놓쳤습니다. – DrugCrazed

관련 문제