现在还是有很多软件开发过程中,程序员使用的还是动态的在程序中组装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 的问题