2017-06-29 40 views
0

我第一次使用Java調用一個SP,所以這可能是一個我忽略的簡單問題。hibernate createStoredProcedureQuery execute throws callablestatement.getmoreresults

我有幾種方法,我正在嘗試做到這一點,並在兩者上都出現錯誤。

em是一個EntityManager,它在類中聲明的更高,我在調試期間檢查過它,並且數據庫連接是正確的。

第一個是使用StoredProcedureQuery引發錯誤;

javax.persistence.PersistenceException:org.hibernate.SQLGrammarException:錯誤調用CallableStatement.getMoreResults

try { 
    StoredProcedureQuery query = em.createStoredProcedureQuery("usp_myProc"); 
    query.registerStoredProcedureParameter(0, Integer.class, ParameterMode.IN); 
    query.setParameter(0, id); 
    query.execute(); 
} 
catch (Exception ex) { 
    log.error(ex.toString()); 
} 

我的第二次嘗試,試圖用本機查詢(當我閱讀文檔聽起來右)

try { 
    Query query1 = em.createNativeQuery("EXEC usp_myProc ?"); 
    query1.setParameter(1, id); 
    Integer val = (Integer) query1.getSingleResult(); 
} 
catch (Exception ex) { 
    log.error(ex.toString()); 
} 

該過程已被簡化爲一個簡單的「選擇1」,以確保這不是問題。

PROCEDURE [usp_myProc] 
-- Add the parameters for the stored procedure here 
@id INT 
AS 
BEGIN 
    SELECT 1 
END 

我已經谷歌周圍(這是我從哪裏得到原生查詢代碼),但無法得到任何回報。即使只是一個沒有返回值的存儲過程調用,現在對我來說也是神的結果。

感謝您提供任何幫助。

回答

1

StoredProcedureQuery指數開始在1

query.registerStoredProcedureParameter(1, Integer.class, ParameterMode.IN); 
query.setParameter(1, id); 
+0

感謝您的幫助,但我仍然得到同樣的錯誤 –

+1

嘗試在程序開始時設置'SET NOCOUNT ON'避免數據庫統計信息返回 – Reimeus

+0

Reimeus破解它,再次感謝您的幫助 –

相關問題