1
public GenericRawResults<Object[]> getCountByStatus(Date date,int status){
        Log.info("CallDayPlanningDao",date.toString());
        GenericRawResults<Object[]> rawResults=null;
        Dao callDayPlanningDao = getDao(CallDayPlanning.class);
        QueryBuilder query = callDayPlanningDao.queryBuilder();
        int year = date.getYear();
        int month = date.getMonth();
        Date date1 = new Date(year, month,1);
        Date date2 = new Date(year, month+1,1);

        Date startDate = new Date(date1.getTime()-5);
        Date endDate = new Date(date2.getTime()-5);
        try {
            **query.where().between("calldate", startDate, endDate);**//This line is not working
            if(status==Constant.cnStatus){
                query.where().in("callstatus", status,Constant.ccStatus);
            }else{
                query.where().eq("callstatus", status);
            }
            query.groupBy("calldate");
            query.selectRaw("calldate,count(*)");
            rawResults = callDayPlanningDao.queryRaw(query.prepareStatementString(), new DataType[] {
                            DataType.DATE_STRING, DataType.INTEGER });
            // page through the results

        } catch (SQLException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        return rawResults;
    }

さて、オブジェクトの数を取得したいのですが、日付の条件が無効で、データベースからすべてのデータを取得しています。誰かが私を助けてくれますか?ありがとうございます。

4

2 に答える 2

1

calldate列のタイプが間違っている場合は修正してくださいDataType.DATE_STRING。その場合、永続化されたデータ型が VARCHAR であることを意味するため、クエリを実行すると、日付比較ではなく文字列比較が行われます。したがって、問題を解決するには、次のいずれかを実行できます。

  1. として表されるcalldate列のタイプを に変更します。DataType.DATETIMESTAMP
  2. calldate列のタイプを に変更しますDataType.DATE_LONG
  3. 必要に応じて文字列比較を行う方法を見つけます (たとえば、値が時間文字列形式と一致するdate(calldate)場合は SQL 関数を呼び出しますhttp://www.sqlite.org/lang_datefunc.htmlを参照)。calldate

これが私がやったことです、それはきれいではありませんが、望んでいたように機能します:

QueryBuilder<OffreEntity, Integer> qb = this.daoOffre.queryBuilder();
//Need to format the date i want to compare so it can actually be compare with what i have on db
SimpleDateFormat dateFormatter = new SimpleDateFormat("yyMMdd");
String correctFormat = dateFormatter.format(dateLimite);
//In db the date is represented as a VARCHAR with format dd/MM/yy so i need to reformat so it matches yyMMdd
String rawQuery = String.format("substr(%1$s,7)||substr(%1$s,4,2)||substr(%1$s,1,2) > '%2$s'", OffreEntity.COLUMN_NAME_DATE, correctFormat);
qb.where().raw(rawQuery);
offresDept = qb.query();

それが役に立てば幸い!

Ps:日付形式のクエリを提供してくれた Jack Douglas に感謝します。

于 2012-06-06T09:25:10.197 に答える