在PrepareStatement中是否有任何基于通用的替代方法来设置参数

时间:2013-05-09 17:38:51

标签: java sql performance generics h2

我正在开发一个数据库应用程序。目前我正在使用java.sql结合H2嵌入式数据库。我想开发Don't Repeat Yourself方式 所以我设置了一个可重复使用的Database Row类和Database Property类,如下所示:     公共类DatabaseProperty {     private String PropertyName;     私人T值;     private boolean Identifier;

public DatabaseProperty(String PropertyName, T Value, boolean identifier) {
    this.PropertyName = PropertyName;
    this.Value = Value;
    this.Identifier = identifier;
}

public String getPropertyName() {
    return PropertyName;
}
public T getValue() {
    return Value;
}
public void setValue(T Value) {
    this.Value = Value;
}
public boolean isIdentifier() {
    return Identifier;
}

}

和...     公共类DatabaseRow {         protected Connection DBConnection;         protected String TableName;         protected HashSet = new HashSet<>();

    public DatabaseRow() //With all the above variables. Apologies for being lazy to type ;)
    //Here's the problem part
    //I'm trying to automatically generate an SQL Statement
    //to check that the row specified by primary unique keys (ex:- Username and Password Combination for Log In)
    public boolean existsInTable(){
    try {
        String SQL = "SELECT * FROM "+TableName+" WHERE ";

        boolean addAND = false;
        for(DatabaseProperty d:Columns) {
            if(d.isIdentifier()) {
                SQL+=(addAND?"AND ":"")+d.getPropertyName()+" = ? ";
                addAND = true;
            }
        }
        PreparedStatement ps = getDBConnection().prepareStatement(SQL);

代码继续......
问题是我没有基于通用的方法来设置PeparedStatement类中的参数。而是有setString(int index,String s)等。 请帮我克服这个.. 是否有任何面向对象的包装器,如PHP的NotORM?在这些选项中,性能和编码之间是否存在折衷?

1 个答案:

答案 0 :(得分:2)

尝试使用它:

ps.setObject(index, object);

它应该适用于index不为null的所有情况。我认为这对你的案子来说不是问题。 如果object为null,则需要设置类型

ps.setObject(index, null, type);

您可以从参数元数据对象中获取的类型:

ParameterMetaData meta=ps.getParameterMetaData();
int type = meta.getParameterType(index);