日期:2014-05-20  浏览次数:20620 次

怎样根据传递过来的参数,动态组合sql语句?
我这个是 控制四个下拉框的 查询语句 当选择一个下拉框以后 选择的值就会传递过去 但是 当选择两个或三个的时候有的没有选择 它的值 就是 null 这样 and 就满足不了条件 查询不出来数据。。。
Java code

public List<Map<String, Object>> findMovieByType(String type,String spinnerRegion,String spinnerActor,String spinnerYear,String television,int pageNum,int numSize){

Cursor cursor = db.rawQuery("select * from Online_All where type=? and region=? and actor=? and year=? and television=? limit ?,?",
                        new String[]{String.valueOf(type),String.valueOf(spinnerRegion),String.valueOf(spinnerActor),
                    String.valueOf(spinnerYear),String.valueOf(television),String.valueOf(m),String.valueOf(numSize)});

}



我这里面传过来了太多参数,而且 有些参数 只有 选择了下拉框以后 才会 将值赋过来。。。但是 在没有付过来之前 它们是空的,因为 个条件之间是 and 所以 在查询语句里面 就不会查寻到 结果 ,那么怎样 写 当 有些值是空值的时候 不让其参与 作为 查询条件呢? 总不能 写好多个
Java code

 if(type==null){
Cursor cursor = db.rawQuery("查询语句里面 不写  type=? ");
}
if(spinnerRegion==null){
Cursor cursor = db.rawQuery("查询语句里面 不写  region=?");
}
。。。。等等 这样写的话  就不用说了 太不实际了。。。




------解决方案--------------------
for example
Java code
StringBuilder sql = StringBuilder("select * from Online_All where 1=1");
if (type!=null && !type.isEmpty())
    sql.append(" and type = '").append(type).append("'");
if (spinnerRegion!=null && !spinnerRegion.isEmpty())
    sql.append(" and region = ").append(spinnerRegion).append("'");
... //so on
Cursor cursor = db.rawQuery(sql.toString());

------解决方案--------------------
探讨
for example

Java code

StringBuilder sql = StringBuilder("select * from Online_All where 1=1");
if (type!=null &amp;&amp; !type.isEmpty())
sql.append(" and type = '").append(type).append("'……