使用dao.queryRaw(String, RowMapper, String... params)
时,根据字段声明中指定的格式,有一种方法可以在作为参数传递时自动格式化日期吗?
示例:
数据类声明:
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 :(得分:1)
一种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);
答案 1 :(得分:1)
我非常确定使用Date
可以直接使用QueryBuilder
。但是,如果您需要使用仅处理字符串的原始查询,则会出现问题。
List<Example> results =
exampleDao.queryBuilder().where().eq("date", new Date()).query();
如果您无法使用QueryBuilder
,那么一个hack就是将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());
}
}