Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java DAO函数,通过字符串concat将变量填充到SQL查询中,而不是使用var args和命名查询_Java_Arguments_Dao - Fatal编程技术网

Java DAO函数,通过字符串concat将变量填充到SQL查询中,而不是使用var args和命名查询

Java DAO函数,通过字符串concat将变量填充到SQL查询中,而不是使用var args和命名查询,java,arguments,dao,Java,Arguments,Dao,我有一些DAO函数,它们通过字符串concat将变量填充到SQL查询中,而不是使用var args和命名查询。这会导致潜在的SQL注入漏洞以及HBM查询问题,如日期格式、日期时区问题等 我将在下面发布一个代码,我需要将其转换为使用varargs。我有很多这样的更改要做,但是如果有人能指导我如何做,我可以尝试修复其余的。谢谢 public Bidstage findBidstageByName(int companyId, String bidStageName) { String

我有一些DAO函数,它们通过字符串concat将变量填充到SQL查询中,而不是使用var args和命名查询。这会导致潜在的SQL注入漏洞以及HBM查询问题,如日期格式、日期时区问题等

我将在下面发布一个代码,我需要将其转换为使用varargs。我有很多这样的更改要做,但是如果有人能指导我如何做,我可以尝试修复其余的。谢谢

public Bidstage findBidstageByName(int companyId, String bidStageName) {
        StringBuffer qbe = new StringBuffer();
        qbe.append("select b from Bidstage b where b.deleted=0 and b.company.idCompany="+companyId+" and b.name='"+bidStageName+"'");
        return (Bidstage) super.findUniqueByQuery(qbe.toString());
    }
对于上述方法,我需要使用varagrs

这就是findUniqueByQuery()的用法

protectedt findUniqueByQuery(字符串qbe)抛出InfrastructureException{
集合c=列表(qbe);
返回c.size()>0?c.iterator().next():null;}
这是我的列表,它看起来像是在使用varargs。我有一个scratch项目,正在尝试学习一些编码实践。这是否意味着它正在使用varagars

protected Collection<T> list(String qbe, Object... parameterMap) throws InfrastructureException { 
return this.findByQuery(qbe, parameterMap); } 
受保护的集合列表(字符串qbe、对象…parameterMap)引发InfrastructureException{
返回此.findByQuery(qbe,parameterMap);}
这是我的findByQuery

public Collection<T> findByQuery(String qbe, Object... parameterMap) throws InfrastructureException {
        return (Collection<T>) anonymousFindByQuery(qbe, parameterMap);
    }
public Collection<?> anonymousFindByQuery(String qbe, Object ...parameterMap) 
            throws InfrastructureException{
        getSession();
        try {
            Query q = createQuery(qbe, parameterMap);
            return q.list();
        } //end try
        catch (HibernateException ex) {
            WLog.DAOLogger.error("HibernateException", ex);
            throw new InfrastructureException(ex);
        } //end
    }
public Collection findByQuery(字符串qbe,对象…参数map)抛出InfrastructureException{
返回(收集)匿名FindByQuery(qbe,parameterMap);
}
和匿名FindByQuery

public Collection<T> findByQuery(String qbe, Object... parameterMap) throws InfrastructureException {
        return (Collection<T>) anonymousFindByQuery(qbe, parameterMap);
    }
public Collection<?> anonymousFindByQuery(String qbe, Object ...parameterMap) 
            throws InfrastructureException{
        getSession();
        try {
            Query q = createQuery(qbe, parameterMap);
            return q.list();
        } //end try
        catch (HibernateException ex) {
            WLog.DAOLogger.error("HibernateException", ex);
            throw new InfrastructureException(ex);
        } //end
    }
公共集合匿名FindByQuery(字符串qbe,对象…参数映射)
抛出InfrastructureException{
getSession();
试一试{
查询q=createQuery(qbe,参数映射);
返回q.list();
}//结束尝试
捕获(HibernateeException例外){
错误(“HibernateeException”,ex);
抛出新的InfrastructureException(ex);
}//结束
}
这个是createQuery

protected Query createQuery(String qbe, Object... parameterMap) throws InfrastructureException {
        Session session = getSession();
        Query q = session.createQuery(qbe);

        String formattedQuery = String.format("%s ", qbe);

        for (int i = 0; i < parameterMap.length; i = i + 2) {

            //Put the data in easy to use forms.
            Object key = parameterMap[i];
            Object value = parameterMap[i + 1];
            String formattedKey = String.format(":%s ", key);

            if(value == null || formattedQuery.indexOf(formattedKey) == -1){
                continue;
            }

            if(value instanceof ArrayList){
                q.setParameterList(key.toString(), (Collection<?>)value);
            }
            else{
                q.setParameter(key.toString(), value);
            }
        }
        return q;
    }
protectedquerycreatequery(字符串qbe,对象…参数map)抛出InfrastructureException{
Session=getSession();
Query q=session.createQuery(qbe);
String formattedQuery=String.format(“%s”,qbe);
对于(int i=0;i
findUniqueByQuery()方法是什么样的?他们应该提供一个接受参数的版本,例如使用
PreparedStatement
来填充参数,并负责SQL注入。那么
list(qbe)
做什么呢?请编辑您的问题并在问题中包含代码。评论中的内容不太清晰。抱歉,我已更新。谢谢。好吧,至少您得到了一个
parameterMap
。但是,这表示命名参数(如果要使用varargs,这是有问题的),您必须将其传递到
findUniqueByQuery
,然后传递到
list()
。你能把
findByQuery
的代码包括进来吗?那么听起来好像已经有一个方法可以调用了,比如
super.findUniqueByQuery(qbe.toString(),varargs)。只需在查询中填写占位符。
findUniqueByQuery()
方法是什么样的?他们应该提供一个接受参数的版本,例如使用
PreparedStatement
来填充参数,并负责SQL注入。那么
list(qbe)
做什么呢?请编辑您的问题并在问题中包含代码。评论中的内容不太清晰。抱歉,我已更新。谢谢。好吧,至少您得到了一个
parameterMap
。但是,这表示命名参数(如果要使用varargs,这是有问题的),您必须将其传递到
findUniqueByQuery
,然后传递到
list()
。你能把
findByQuery
的代码包括进来吗?那么听起来好像已经有一个方法可以调用了,比如
super.findUniqueByQuery(qbe.toString(),varargs)。只需在查询中填写占位符。