2014-11-24 1 views
0

임 저장 기능 SQL 오류와 같은 저장 함수를 호출 다음 요구하는 포스트 그레스

PreparedStatement deleteAll=connection.prepareStatement("{ call delete_all_data() }"); 
deleteAll.execute(); 

그리고 내가 볼 로그에

:

15:16:31,950 WARN SqlExceptionHelper:143 - SQL Error: 0, SQLState: 42601 
15:16:31,950 ERROR SqlExceptionHelper:144 - ERROR: syntax error at or near "{" 
    Position: 1 

가의 prepareStatement 문제점은 무엇입니까 ??

+1

저장 프로 시저에 'CallableStatement'를 사용해야합니다. –

+0

'connection.prepareStatement ("select delete_all_data()")'이면 충분합니다. 'CallableStatement'가 필요 없습니다. –

+0

@LuiggiMendoza JDBC 드라이버는'Statement'와'PreparedStatement'를 사용하여 호출 이스케이프를 지원해야합니다. 저장 프로 시저에 'OUT' 매개 변수 ('PreparedStatement') 또는 매개 변수 자리 표시 자 ('Statement'의 경우)가없는 한이 작업이 작동합니다. 그러나 실제로는 대부분의 드라이버가'CallableStatement'만으로이를 지원합니다. –

답변

2

(SQL이 필요함)을 connection.prepareCall으로 변경하십시오. CallableStatementPreparedStatement이므로 필요한 변경 사항만으로 충분합니다.

+1

질문 자체에 대한 내 의견을 보아라. 아마도 이것이 해결책 일 것이다. 명세에 따른 것이 아니기 때문에, 호출 이스케이프는'Statement'와'PreparedStatement'에서도 지원되어야한다. 참조 : JDBC 4.2의 6.4 절, http://mail.openjdk.java.net/pipermail/jdbc-spec-discuss/2013-January/000030.html –

2

prepareCall을 사용하여 저장 프로 시저를 호출합니다.

String SQL = "{call delete_all_data()}"; 
cstmt = conn.prepareCall (SQL);