动态组装sql语句时使用str = where = "1=1"; 然后再进行追加对性能的影响

      现在还是有很多软件开发过程中,程序员使用的还是动态的在程序中组装sql语句,然后通过自己封装的DBhelper来执行sql语句,这是没有问题的,但是在有的时候我们不确定在某一次查询的时候,是否需要加上where条件进行筛选,这个时候有一种很便捷的方式就是,默认给sql语句添加条件where 1=1,如果后续有条件需要加入,只需要追加“ and  xx=xx”即可,这样是免去了到底应该追加 "where xx=xx" 还是应该追加“and xx=xx”这种判断。但是1=1这个恒为真的条件,会让数据库中建立的索引失效,带有1=1这种条件的筛选会强迫数据库进行全表查询,再数据量大的情况下全表查询是相当损耗性能的。那么应该怎么解决呢。 

private void doQuery()
{
    Bool hasWhere = false;
    StringBuilder sql = new StringBuilder(" SELECT * FROM T_Employee");
    if(工号复选框选中)
    {
        hasWhere = appendWhereIfNeed(sql, hasWhere);
        sql.appendLine("FNumber BETWEEN '"+工号文本框1内容+"' AND '"+工号文本框2内容+"'");
    }
    if(姓名复选框选中)
    {
        hasWhere = appendWhereIfNeed(sql, hasWhere);
        sql.appendLine("FName LIKE '%"+姓名文本框内容+"%'");
    }
    if(年龄复选框选中)
    {
        hasWhere = appendWhereIfNeed(sql, hasWhere);
        sql.appendLine("FAge BETWEEN "+年龄文本框1内容+" AND "+年龄文本框2内容);
    }
executeSQL(sql);
}
private bool appendWhereIfNeed(StringBuilder sql, bool haswhere)
{
    if (haswhere == false)
    {
        ql.AppendLine("where");
    }
    else
    {
        sql.AppendLine("and");
    }
    return true;
}
也就是解决是该添加where 还是添加and 的问题

你可能感兴趣的:(sql)