我第一次使用Java来呼叫SP,所以这可能是我忽略的一个简单问题。
我有几种方法可以尝试这样做并且两者都出错了。
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
我有一个谷歌(这是我从中获取原生查询代码的地方),但无法获得任何回报。即使只是一个没有返回值的存储过程调用,对我来说也是一个神的结果。
感谢您提供任何帮助。
答案 0 :(得分:5)
StoredProcedureQuery
个索引从1
query.registerStoredProcedureParameter(1, Integer.class, ParameterMode.IN);
query.setParameter(1, id);
答案 1 :(得分:0)
我遇到了同样的问题,并且我使用了EntityManager
提供的方法,如下所示:
entityManager.createNativeQuery(
"CALL storedProcedureName(:param1, :param2, :param3)")
.setParameter("param1", parameter1)
.setParameter("param2", parameter2)
.setParameter("param3", parameter3)
.getSingleResult();
在我的情况下,我也将getSingleResult()
强制转换为String,因为我期望它是INOUT StoredProcedure的参数,并且可以正常工作。
我希望它也会对您有所帮助。