Android的ORM无法找到我的列名

时间:2015-04-15 10:09:37

标签: android sqlite sugarorm

我试图选择entitie_id = *some id*

的所有实体

我按照这条规则执行此操作:

List<NodeSugar> nodesugars = NodeSugar.find(NodeSugar.class, "entitie_id = ? ", String.valueOf(nodeid));

我知道我应该得到一些结果,但我得到一个错误。 这个错误:

E/SQLiteLog﹕ (1) no such column: entitie_id

我知道列存在,因为我可以在代码的不同部分设置它。

我哪里错了?

3 个答案:

答案 0 :(得分:35)

您应该可以使用“entitieid”进行查询。

Sugar ORM在表中创建列时会进行一些转换。这是一个基本的例子:

String firstName; //creates column first_name
int entitie_id;   //creates column entitieid

该文档仅指定从驼峰案例到下划线分离的转换。我不得不想出另一个。

答案 1 :(得分:11)

您可以在构建查询时使用NamingHelper.toSQLNameDefault()来包装列名。尝试:

List<NodeSugar> nodesugars = NodeSugar.find(NodeSugar.class, NamingHelper.toSQLNameDefault("entitie_id") + " = ? ", String.valueOf(nodeid));

NamingHelper在Sugar ORM库中用于创建表和列名称:

https://github.com/satyan/sugar/blob/master/library/src/main/java/com/orm/helper/NamingHelper.java

答案 2 :(得分:0)

SugarORM当前使用toSQLName()类的StringUtil方法为列生成名称 例如,在您的情况下:

List<NodeSugar> nodesugars = NodeSugar.find(NodeSugar.class, StringUtil.toSQLName("entitie_id")+" = ? ", String.valueOf(nodeid));

另一种简洁的方法是使用Select类:

List<NodeSugar> nodesugars = Select.from(NodeSugar.class).where(Condition.prop(StringUtil.toSQLName("entitie_id")).eq(nodeid)).list();

https://satyan.github.io/sugar/query.html