2015-07-28 47 views
3

我定义直通平常的注解表/字段名,如:如何获取OrmLite中的列/字段名称?

@DatabaseTable(tableName = "M") 
public class Headers { 
    //android requires primary key as _ID 
    @DatabaseField(generatedId = true, columnName = "_ID", dataType = DataType.INTEGER_OBJ) 
    private Integer id; 

    @DatabaseField(
      columnName = "MM2", 
      uniqueCombo = true, 
      canBeNull = true, //null means root folder 
      dataType = DataType.INTEGER_OBJ 
    ) 
    private Integer parentId; 
} 

与此同时深的地方在我的代码,我需要做一些疑问,如:

QueryBuilder<Headers, Integer> qb = headersDao.queryBuilder(); 
qb.where().eq("_ID", headerId); //_ID field name 

这种代码长相丑陋,因为字段名(在这种情况下_ID)是硬编码(即使会被宣布为final static String

问题:是正常Ø rmLite编码练习?我期待我可以使用,而不是硬编码_ID字段的一些小代码。确定OrmLite“知道”所有字段名称。任何人都可以帮助我?

回答

3

定义字段名称不变,像

private static final String FIELD_ID = "_ID"; 
// Or make it public as Gray said into comment 
public static final String FIELD_ID = "_ID"; 

,并把它作为像

//android requires primary key as _ID 
@DatabaseField(generatedId = true, columnName = FIELD_ID, dataType = DataType.INTEGER_OBJ) 
private Integer id; 

而且到你的查询

QueryBuilder<Headers, Integer> qb = headersDao.queryBuilder(); 
qb.where().eq(FIELD_ID, headerId); //_ID field name 

如果你看一下documentation

他们也遵循相同的

QueryBuilder<Account, String> qb = accountDao.queryBuilder(); 
Where where = qb.where(); 
// the name field must be equal to "foo" 
where.eq(Account.NAME_FIELD_NAME, "foo"); 
// and 
where.and(); 
// the password field must be equal to "_secret" 
where.eq(Account.PASSWORD_FIELD_NAME, "_secret"); 
PreparedQuery<Account, String> preparedQuery = qb.prepareQuery(); 
+0

我怀疑你想字段名'public'以便其他人可以参考它。 – Gray

+0

@格雷嘿灰色感谢指出。是的,他也可以公开它(如果该变量也在课堂以外使用) –

+0

我希望有一个等效的映射器类,它将有列表,列名 –

相关问题