如何在OrmLite中获取列/字段名称?

3

我通过通常的注释来定义表/字段名称,例如:

@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

问题:这是OrmLite编码实践的正常方式吗?我期望我可以使用一些小代码代替硬编码的_ID字段。当然OrmLite“知道”所有字段名称。有人能帮助我吗?

1个回答

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

如果你查看文档

他们也遵循相同的规则。

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();

我猜你想把字段名命名为“public”,这样别人就可以引用它了。 - Gray
@Gray 嘿,谢谢你指出这个问题。是的,如果该变量被类外部使用,他也可以将其公开。 - Pankaj Kumar
我希望有一个相当于映射器类的东西,它将具有表格列表和列名。 - Mahendran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接