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

Android 如何在OrmLite中获取列/字段名?,android,sqlite,android-sqlite,ormlite,Android,Sqlite,Android Sqlite,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; @DatabaseFiel

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

@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
QueryBuilder qb=headersDao.QueryBuilder();
qb.where().eq(“_ID”,headerId)//_ID字段名
这种代码看起来很难看,因为字段名(在本例中为
\u ID
)是硬编码的(即使会声明为
最终静态字符串


问题:这是正常的或MLite编码实践吗?我希望我可以使用一些小代码来代替硬编码的
\u ID
字段。当然,OrmLite“知道”所有字段名。有人能帮我吗?

为字段名定义一个常量,如

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 qb=headersDao.QueryBuilder();
qb.where().eq(字段ID,标题ID)//_ID字段名

如果你看

它们也遵循同样的原则

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();
QueryBuilder qb=accountDao.QueryBuilder();
其中Where=qb.Where();
//名称字段必须等于“foo”
式中.eq(Account.NAME_FIELD_NAME,“foo”);
//及
where.and();
//密码字段必须等于“\u secret”
其中.eq(Account.PASSWORD\u FIELD\u NAME,“\u secret”);
PreparedQuery PreparedQuery=qb.prepareQuery();

我怀疑您想将字段名
公开
,以便其他人可以引用。@Gray嘿,Gray,谢谢您指出这一点。是的,他也可以将其公开(如果该变量也被类外的人使用),我希望有一个映射器类等价物,它将有表列表、列名