在 PrepareStatement 中设置参数是不是有任何基于通用的替代方法
Posted
技术标签:
【中文标题】在 PrepareStatement 中设置参数是不是有任何基于通用的替代方法【英文标题】:Is there any generic based alternatives for setting parameters in PrepareStatement在 PrepareStatement 中设置参数是否有任何基于通用的替代方法 【发布时间】:2013-05-09 17:38:50 【问题描述】:我正在开发一个数据库应用程序。目前我正在使用结合 H2 嵌入式数据库的 java.sql。我想开发Don't Repeat Yourself 方式。 所以我设置了一个可重用的Database Row类和Database Property类如下: 公共类数据库属性 私有字符串属性名; 私人 T 值; 私有布尔标识符;
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 受保护的连接 DBConnection; 受保护的字符串表名; 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?这些选项在性能和编码易用性之间是否有任何权衡?
【问题讨论】:
感谢@jarrodd-roberson 纠正我。 【参考方案1】:尝试使用这个:
ps.setObject(index, object);
它应该适用于所有索引不为空的情况。我认为这对你的情况来说不是问题。 如果object为null,则需要设置类型
ps.setObject(index, null, type);
可以从参数元数据对象中获取的类型:
ParameterMetaData meta=ps.getParameterMetaData();
int type = meta.getParameterType(index);
【讨论】:
以上是关于在 PrepareStatement 中设置参数是不是有任何基于通用的替代方法的主要内容,如果未能解决你的问题,请参考以下文章