2016-01-22 2 views
0

При использовании dao.queryRaw(String, RowMapper, String... params) существует ли способ автоматического форматирования даты при передаче как параметра на основе указанного формата для объявления поля?Параметр даты автоматического форматирования для Ormlite queryRaw

Пример:

класс данных декларации:

public class Example { 
    @DatabaseField(generatedId = true) 
    int id; 
    @DatabaseField(dataType = DataType.DATE_STRING, format = "yyyy/MM/dd HH:mm:ss") 
    Date date; 
} 

Запрос:

String query = "select * from example where date = ?" 
String[] params = { new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(new Date()) }; 
return dao.queryRaw(query, dao.getRawRowMapper(), params); 

Есть ли способ задать Ormlite формат даты или сделать его форматирования даты меня, вместо того, чтобы повторять (или использовать одну и ту же константу) строку?

ответ

0

Вид Hacky решения:

String query = "select * from example where date = ?" 

// cast dao from interface to implemenation :-(
// and get the field info from its table info 
FieldType fieldType = ((BaseDaoImpl<Example, Integer>) dao).getTableInfo().getFieldTypeByColumnName("date"); 
// format parameter 
String param = DateStringType.getSingleton().javaToSqlArg(fieldType, new Date()).toString(); 
String[] params = {param}; 
return dao.queryRaw(query, dao.getRawRowMapper(), params); 
0

Я уверен, что с помощью Date непосредственно работает с QueryBuilder. Это проблема, однако, если вам нужно использовать необработанный запрос, который обрабатывает только строки.

List<Example> results = 
    exampleDao.queryBuilder().where().eq("date", new Date()).query(); 

Если вы не можете использовать QueryBuilder затем один хак для кодирования format = "..." строку как статический и добавьте dateToString(Date) к Example. Что-то вроде этого должно работать:

public class Example { 
    private static final String DATE_FORMAT = "yyyy/MM/dd HH:mm:ss"; 
    @DatabaseField(generatedId = true) 
    int id; 
    @DatabaseField(dataType = DataType.DATE_STRING, format = DATE_FORMAT) 
    Date date; 
    ... 
    public String dateToString(Date date) { 
     // remember that SimpleDateFormat is not reentrant 
     return new SimpleDateFormat(DATE_FORMAT).format(new Date()); 
    } 
} 
+0

Спасибо за ваш ответ. Я использовал простой пример, чтобы проиллюстрировать проблему, но поскольку мне нужна настраиваемая фильтрация и объединение других таблиц, использование 'queryBuilder' не является вариантом. –

Смежные вопросы