Java - 使用通用参数调用存储过程

标签 java sql oracle generics

我想调用一个存储过程(Oracle)。由于我的过程调用是动态的,因此我需要动态管理过程参数。 问题是我想避免使用 instanceof 关键字,因为它不适用于主要类型。 有没有更干净的方法来调用这样的过程?

    public void executeProcedure(StoredProcedure proc) {        
        LinkedList<ProcedureParameter<?>> parameters = proc.getParameters();

        CallableStatement statement = connection.prepareCall("{ call MY_PACKAGE.MY_PROCEDURE( ?, ?, ? ) }");

        for (int i = 0; i < parameters.size(); i++) {
            Object paramValue = parameters.get(i).getValue();

            // Beginning of smelly code

            if (paramValue instanceof String) {
                statement.setString(i + 1, (String) paramValue);
            }
            else if (paramValue instanceof ...) {
                ...
            }
            else {
                ...
            }

            // End of smelly code
        }

        statement.execute();            
    }

 

    public class ProcedureParameter<E> {
        private String name;
        private E value;

        public ProcedureParameter(String name) {
            this.name = name;
        }

        public ProcedureParameter(String name, E value) {
            this.name = name;
            this.value = value;
        }

        // Getters and setters
    }

感谢您的任何想法。

最佳答案

我认为它可以帮助您在没有instanceof的情况下实现所需的功能:http://en.wikipedia.org/wiki/Visitor_pattern

关于Java - 使用通用参数调用存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11139647/

相关文章:

java - 添加带有单词 "add"的数字

java - 某些服务器生成的事件不会通过 Websockets 传递到生产环境中的客户端

sql - 如何在 SQL 中按月按产品创建数据透视表

oracle - 尝试在内部连接到 Oracle,获得空闲实例?

sql-server - SSIS包: convert between unicode and non-unicode string data types

java - 确定在 O(n) 时间和 O(1) 空间内出现次数最多的元素

java - 短路评估顺序和前缀增量运算符

sql - 如何有效地对复杂 SQL 查询的结果进行分页?

sql - 为什么在 SQL Azure 上运行查询速度如此之慢?

java - JSTL中的if语句