我想調用存儲過程(Oracle)。由於我的程序調用是動態的,我需要動態地管理程序參數。 問題是我想避免使用instanceof
關鍵字,因爲它不適合主要類型。 有沒有更簡單的方法來調用這樣的程序?Java - 使用泛型參數調用存儲過程
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
}
謝謝你的任何想法。
如果你唯一的問題是基本類型,我建議你只是使用它們的對象包裝等價物,並讓你的生活變得容易 – ControlAltDel
@ControlAltDel我認爲問題更多的是當向Statement添加參數時,你必須指定類型 - 即'statement.setString,statement.setInteger'等。 – chama
@ControlAltDel這是一個好主意,但問題範圍更廣泛;我的意思是,可能的參數類型的數量是相當大的,我正在尋找一種解決方案,以避免長的if-else序列。 – dounyy