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 - 为什么 Java SimpleDateFormat 在某些服务器上工作而在其他服务器上工作?

php - 如何使用php对sql表中的数字数据进行排序

mysql - 无法解析查询,请检查查询的语法。 (ORA-00905 : missing keyword)

oracle - 为什么此查询不使用 NLSSORT 索引?

java - 在 Windows 10 计算机上安装 Talend v7.0.1 时出错

java - 如何将特定文件类型拉入列表 Android Studio

java - 如何使用 applicationContext beans 填充可变参数构造函数?

ios - Objective-C - CHCSVParser 和 HTTP Post

java - 从 Java 到 SQL 的邻接矩阵

sql select with 不包含