我想调用一个存储过程(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/