Java EclipseLink-Oracle存储过程调用新手问题
我负责一项我认为应该很简单的任务,但因为我以前从未做过,所以我遇到了一些麻烦。我已经成功地使用EclipseLink创建了一个EJB3项目,它将从Oracle数据库中调用许多存储过程。我已经正确配置了数据源,我可以连接和执行简单的存储过程和函数,而不需要参数和返回游标;但是,我目前无法使用参数执行存储过程 我正在使用EclipseLink维基作为参考 代码是:Java EclipseLink-Oracle存储过程调用新手问题,java,oracle,stored-procedures,eclipselink,Java,Oracle,Stored Procedures,Eclipselink,我负责一项我认为应该很简单的任务,但因为我以前从未做过,所以我遇到了一些麻烦。我已经成功地使用EclipseLink创建了一个EJB3项目,它将从Oracle数据库中调用许多存储过程。我已经正确配置了数据源,我可以连接和执行简单的存储过程和函数,而不需要参数和返回游标;但是,我目前无法使用参数执行存储过程 我正在使用EclipseLink维基作为参考 代码是: StoredProcedureCall call = new StoredProcedureCall(); call.setProced
StoredProcedureCall call = new StoredProcedureCall();
call.setProcedureName("p_environment.startSession");
List<String[]> args = new ArrayList<String[]>();
args.add(new String[] { "user", "ae01403" });
args.add(new String[] { "application", "app_code" });
args.add(new String[] { "locale", "it_IT" });
for (String[] pair : args) {
call.addNamedArgumentValue(pair[0], pair[1]);
}
DataReadQuery query = new DataReadQuery(call);
for (String[] pair : args) {
query.addArgument(pair[0]);
}
非常感谢 在代码中,调用.addNamedArgumentValuepair[0],pair[1];听起来很奇怪
你不需要这样做吗
call.addNamedArgument(procedureParameterName, argumentFieldName, argumentType);
它启用存储过程参数与要使用的参数之间的映射
例如,对于您,它提供:
call.addNamedArgument(procedureUserParameterName, "user", String.class);
call.addNamedArgument(procedureUserParameterName, "application", String.class);
call.addNamedArgument(procedureUserParameterName, "locale", String.class);
你保留这个:
DataReadQuery query = new DataReadQuery(call);
for (String[] pair : args) {
query.addArgument(pair[0]);
}
然后调用存储过程:
Session session = jpaEntityManager.getActiveSession();
List args = new ArrayList();
args.add(“ae01403”);
args.add(“app_code”);
args.add(“it_IT”);
List results = (List) session.executeQuery(query, args);
用更准确的答案编辑了我的帖子:谢谢,但是没有,没有运气。我认为call.addNamedArgumentValuepair[0],pair[1];执行与将参数列表作为参数传递给session.executeQuery相同的操作,将值绑定到参数。未指定时,Type默认为String,并且我打算对过程参数名和参数字段名使用相同的名称。错误和生成的代码也是相同的。。。我不知所措。我编辑了这个问题以包含存储过程签名。
Session session = jpaEntityManager.getActiveSession();
List args = new ArrayList();
args.add(“ae01403”);
args.add(“app_code”);
args.add(“it_IT”);
List results = (List) session.executeQuery(query, args);