我想调用一个存储过程(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
}
谢谢你的任何想法。