在 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 中设置参数是不是有任何基于通用的替代方法的主要内容,如果未能解决你的问题,请参考以下文章

parameterType 和 resultType

mybatis学习 POJO的映射文件

在javascript中设置默认参数值的最有效方法是啥?

如何在 NestJS 中设置参数?

java-mybaits-00401-Mapper-输入输出

如何在存储过程中设置日期时间可选参数?