数据库组合查询和模糊查询

组合查询范例:

    /**
     * 搜索条件+排序 得到所有卷烟
     * 
     * @param IS_PROMOTE
     *            //0表示是促销,1表示卷烟列表
     * @param priceValues
     *            价格排序 :1 降序,2升序
     * 
     * @param price
     *            批发价 默认为:不限
     * @param cigaretteFactory
     *            烟厂 默认为:不限
     * @param activity
     *            活动:经营类型1:新品,2:紧俏,3:顺销,9:其他 默认为:不限
     * @param  isSearch 是否模糊搜索
     * 
     *  @param  searchText 模糊搜索内容
     */
    public List<Cigarette> getCigaretteAll(String IS_PROMOTE,int priceValues, String price,
            String cigaretteFactory, String activity,String isSearch,String searchText) {
        StringBuffer sb = new StringBuffer();
        String NOLIMIT = "全部";
//      经营类型1:,2:紧俏,3:顺销,9:其他
        if(activity.equals("新品")){
            activity="1";
        }else if(activity.equals(NOLIMIT)){
            activity=NOLIMIT;
        }else if(activity.equals("紧俏")){
            activity="2";
        }else if(activity.equals("顺销")){
            activity="3";
        }else if(activity.equals("其他")){
            activity="9";
        }
        if (!price.equals(NOLIMIT)) {
            sb.append(price);
        }

          if (!cigaretteFactory.equals(NOLIMIT)) {
            if(!price.equals(NOLIMIT)){
                sb.append(" AND ");
            }
            sb.append("  MFR_NAME =").append("'").append(cigaretteFactory+"' ");
        }
        if (!activity.equals(NOLIMIT)) {
            if(!cigaretteFactory.equals(NOLIMIT)){
                sb.append(" AND ");
            }
            sb.append(" BRD_TYPE=").append("'").append(activity+"'");
        }
        if (IS_PROMOTE.equals("0")) {//0表示是促销,1表示卷烟列表
            if(sb.toString().length()>0){
                sb.append(" AND ");
            }
            sb.append(DBHelper.IS_PROMOTE+"=").append("'").append(IS_PROMOTE+"' ");
        }
        if(isSearch.equals("true")){
            if(sb.toString().length()>0){
                sb.append(" AND ");
            }
            sb.append( "CGT_NAME LIKE ").append(" '").append("%"+searchText+"%"+"'");
        }
        Cursor cursor = null;
        String values = "";
        if (priceValues == 1) {
            values = DBHelper.PRICE + " DESC";
        } else {
            values = DBHelper.PRICE + " ASC";
        }
        Log.v("tag", "赛选条件:"+sb.toString());
        if (sb.length() == 0) {
            cursor = db.query(DBHelper.CIGARETTE_TABLE_NAME, null, null, null,
                    null, null, values);
        } else {
            cursor=db.rawQuery("SELECT * FROM "+DBHelper.CIGARETTE_TABLE_NAME+" WHERE "+sb
                    .toString().trim(), null);
        }
        return getListCigarette(cursor);
    }

组合查询就是多条件查询,我们首先定义StringBuffer把多个条件按SQL语法组合在一起,每个条件用AND连接。

范例的第一条SQL语句:sb.append(price);

首先我们判断price是全部还是价格区间,如果是全部则不做处理,是价格区间就拼接在SQL语句中。
首先把价格区间转换成SQL语言可以识别的形式:
在values文件夹下创建arrays.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="search_prices">
        <item>全部</item>
        <item>0-150</item>
        <item>151-400</item>
        <item>401-800</item>
        <item>801+</item>
    </string-array>
    <string-array name="search_prices_value">
        <item>全部</item>
        <item>PRICE&lt;=150 and PRICE&gt;=0</item>
        <item>PRICE&lt;=400 and PRICE&gt;=151</item>
        <item>PRICE&lt;=800 and PRICE&gt;=401</item>
        <item>PRICE&gt;=801</item>
    </string-array>
    </resources>

从arrays.xml中获取价格区间的方式:

String price = ac.getResources().getStringArray(
                        R.array.search_prices_value)[index];
                        //index为第几个item

范例第二条SQL语句:

sb.append("  MFR_NAME =").append("'").append(cigaretteFactory+"' ");

MFR_NAME为创建数据库是定义的cigaretteFactory名称,首先判断cigaretteFactory是否为全部,如为全部不拼接SQL语句,不是拼接SQL语句;要拼接SQL语句要判断前一条SQL语句是否有内容,如果前一条有内容拼接sb.append(” AND “); 没有不做处理。
注意:要查询的名词要用单引号引起!

范例模糊查询SQL语句:

sb.append( "CGT_NAME LIKE ").append(" '").append("%"+searchText+"%"+"'");

注意:单引号和百分号的使用!

SQL语句排序:

如果排序的名称是String类型会按首字母排序,如果首字母相同按下一个字母。
为了防止误差,我们可以用java语句进行排序:

排序方法 :

public class SortComparator implements Comparator {  
    @Override  
    public int compare(Object lhs, Object rhs) {  
       CigaretteUrl a = (CigaretteUrl) lhs;  
       CigaretteUrl b = (CigaretteUrl) rhs;  

        return (int) (b.cigarette.PRICE - a.cigarette.PRICE);  
    }  
}  

自定义类实现Comparator,重写compare方法,返回值为需要排序的字段做减法运算。
Activity中使用SortComparator排序:

Comparator comp = new SortComparator();
                    Collections.sort(cigaretteUrlList, comp);

cigaretteUrlList为需要排序的集合。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值