2017-02-04 2 views
1

Ma colonne de base de données SQLite est définie comme ceci:ORMLite - QueryBuilder à la condition Date

@DatabaseField(canBeNull = true) 
    public Date dateFound; 

quand j'ouvre broswer sqlite je vois qu'il est défini comme ceci:

'dateFound' TIMESTAMP 

Maintenant, je crée QueryBuilder:

DateTime time=new DateTime(); 
DateTime minusDays = time.minusDays(4); 
QueryBuilder<Record, Long> queryBuilder = DatabaseHelper.get().getRecordDao().queryBuilder(); 
Where<Record, Long> where = queryBuilder.where(); 
where.ne("amount",0); 
where.or(); 
where.ge("dateFound",minusDays.toDate()); 
System.out.println(queryBuilder.prepareStatementString()); 

Et la sortie est:

SELECT * FROM `record` WHERE (`amount` <> 0 OR `dateFound` >= ?) 

ce qui est inexact, j'ai même essayé avec new Timestamp(minusDays.toDate().getTime()) et requête résultante a été même ..

Répondre

0

Je l'ai résolu par date coulée qui est sans doute pas la meilleure façon, mais son fonctionnement:

DateTime time=new DateTime(); 
DateTime minusDays = time.minusDays(4); 
QueryBuilder<Record, Long> queryBuilder = DatabaseHelper.get().getRecordDao().queryBuilder(); 
Where<Record, Long> where = queryBuilder.where(); 
where.ne("amount",0); 
where.or(); 
where.raw("cast(`dateFound` as INTEGER)>= "+minusDays.toDate().getTime());