Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “的寄存器参数”;inout cursor";使用Spring JDBCTemplet/StoredProcess键入_Java_Spring Jdbc_Jdbctemplate_Java Stored Procedures - Fatal编程技术网

Java “的寄存器参数”;inout cursor";使用Spring JDBCTemplet/StoredProcess键入

Java “的寄存器参数”;inout cursor";使用Spring JDBCTemplet/StoredProcess键入,java,spring-jdbc,jdbctemplate,java-stored-procedures,Java,Spring Jdbc,Jdbctemplate,Java Stored Procedures,我需要使用SpringJDBC模板调用oracle过程。我能够调用几个具有IN或OUT参数的过程。但是,最近,我得到了编写一个“springdao过程”的需求,该过程有一个“INOUT”和“cursor”类型的属性。具体来说,我不知道如何使用JDBCTemplate/StoredProcedure注册“inout”“cursor”类型参数 Oracle程序详细信息: 名称:-testin_proc(参数1中的varchar,参数2中的游标类型,参数3中的varchar) 哪里 param1在参数

我需要使用SpringJDBC模板调用oracle过程。我能够调用几个具有IN或OUT参数的过程。但是,最近,我得到了编写一个“springdao过程”的需求,该过程有一个“INOUT”和“cursor”类型的属性。具体来说,我不知道如何使用JDBCTemplate/StoredProcedure注册“inout”“cursor”类型参数

Oracle程序详细信息:

名称:-testin_proc(参数1中的varchar,参数2中的游标类型,参数3中的varchar) 哪里 param1在参数中 param2是INOUT参数 param3在参数中

The param2 is cursor type and the cursor has the query string 
that contains multiple attributes. For example,
 (select attribut1, attribut2, attribut3, 
    attribut4 from table where xyz=param1 and abc=param2).

以下链接描述考虑参数类型的数组作为参数类型的数组。虽然这段代码没有使用SpringJDBC模板等来完成任务,但它包括5个步骤。参考:-

到目前为止还不错。但是,我一直在将其转换为Spring JDBCTemplet/StoredProcess。主要是使用Spring JDBCTemplet/StoredProcess注册inout游标类型参数的一部分

感谢您在这方面的帮助

我在谷歌上搜索的东西:-

样本1:-

SqlParameter firstName = new SqlParameter(Types.VARCHAR);
SqlOutParameter outParameter = new SqlOutParameter("firstName", Types.VARCHAR);
List<SqlParameter> paramList = new ArrayList<SqlParameter>();
paramList.add(firstName);
paramList.add(outParameter);    
final String procedureCall = "{call testin_proc(?, ?, ?)}";
Map<String, Object> resultMap = jdbcTemplate.call(new CallableStatementCreator() {
            @Override
            public CallableStatement createCallableStatement(Connection connection) throws SQLException {
                CallableStatement callableStatement = connection.prepareCall(procedureCall);
                callableStatement.setString(1, "param1Data");
                callableStatement.setString(3, "param3Data");
                callableStatement.registerOutParameter(2, Types.VARCHAR);
                return callableStatement;
            }
        }, paramList);
System.out.println("Return out value:"+resultMap.get("firstName"));
SimpleJdbcCall caller = new SimpleJdbcCall(unityJdbcTemplate.getDataSource());
        caller.withProcedureName("GETLINK")
                .declareParameters(new SqlOutParameter("p_links",OracleTypes.CURSOR, new LinkTypeMapper()),
                        new SqlParameter("p_link_id", Types.VARCHAR));
        MapSqlParameterSource params = new MapSqlParameterSource().addValue(
                "p_link_id", linkGroupId);
        Map<String,Object>  results = caller.execute(params);
        return new LinkGroup((Collection<Link>) results.get("p_links"),linkGroupId);
SqlParameter firstName=新的SqlParameter(Types.VARCHAR);
SqlOutParameter outParameter=新的SqlOutParameter(“firstName”,Types.VARCHAR);
List paramList=new ArrayList();
paramList.add(firstName);
参数列表。添加(输出参数);
final String procedureCall=“{call testin_proc(?,?)}”;
Map resultMap=jdbcTemplate.call(新的CallableStatementCreator(){
@凌驾
公共CallableStatement createCallableStatement(连接)引发SQLException{
CallableStatement CallableStatement=connection.prepareCall(procedureCall);
callableStatement.setString(1,“参数1”);
callableStatement.setString(3,“param3Data”);
callableStatement.registerOutParameter(2,Types.VARCHAR);
返回callableStatement;
}
},参数列表);
System.out.println(“返回值:”+resultMap.get(“firstName”);
样本2:-

SqlParameter firstName = new SqlParameter(Types.VARCHAR);
SqlOutParameter outParameter = new SqlOutParameter("firstName", Types.VARCHAR);
List<SqlParameter> paramList = new ArrayList<SqlParameter>();
paramList.add(firstName);
paramList.add(outParameter);    
final String procedureCall = "{call testin_proc(?, ?, ?)}";
Map<String, Object> resultMap = jdbcTemplate.call(new CallableStatementCreator() {
            @Override
            public CallableStatement createCallableStatement(Connection connection) throws SQLException {
                CallableStatement callableStatement = connection.prepareCall(procedureCall);
                callableStatement.setString(1, "param1Data");
                callableStatement.setString(3, "param3Data");
                callableStatement.registerOutParameter(2, Types.VARCHAR);
                return callableStatement;
            }
        }, paramList);
System.out.println("Return out value:"+resultMap.get("firstName"));
SimpleJdbcCall caller = new SimpleJdbcCall(unityJdbcTemplate.getDataSource());
        caller.withProcedureName("GETLINK")
                .declareParameters(new SqlOutParameter("p_links",OracleTypes.CURSOR, new LinkTypeMapper()),
                        new SqlParameter("p_link_id", Types.VARCHAR));
        MapSqlParameterSource params = new MapSqlParameterSource().addValue(
                "p_link_id", linkGroupId);
        Map<String,Object>  results = caller.execute(params);
        return new LinkGroup((Collection<Link>) results.get("p_links"),linkGroupId);
SimpleJdbcCall调用者=新的SimpleJdbcCall(unityJdbcTemplate.getDataSource());
调用方。withProcedureName(“GETLINK”)
.declareParameters(新的SqlOutParameter(“p_links”,OracleTypes.CURSOR,新的LinkTypeMapper()),
新的SqlParameter(“p_link_id”,Types.VARCHAR));
MapSqlParameterSource params=新的MapSqlParameterSource().addValue(
“p_link_id”,linkGroupId);
映射结果=caller.execute(params);
返回新的链接组((集合)results.get(“p_links”),linkGroupId);

我进一步搜索发现,必须编写rowMapper类并注册INOUT参数(将INOUT视为OUT)

您可以通过declareParameter(新的SqlInOutParameter(“inoutparam”,OracleTypes.INTEGER))注册INOUT参数;这只是其中的一部分,如果您可以共享一些相同的工作代码,那就很高兴了。