Home » Android » sqlite – Sugar ORM for Android cant find my column name

sqlite – Sugar ORM for Android cant find my column name

Posted by: admin June 15, 2020 Leave a comment

Questions:

Well I’m trying to select all entities where entitie_id = *some id*

I do this with this rule:

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

I know I should get some results back and I get an error.
this error:

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

I know the column exists because I can set it in a different part of code.

Where am I going wrong?

How to&Answers:

You should be able to query with “entitieid”.

Sugar ORM does some conversion when it creates the columns in the tables. Here is a basic example:

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

The documentation only specifies the conversion from camel case to underscore separation. I had to figure the other one out.

Answer:

You can use NamingHelper.toSQLNameDefault() to wrap column names when building queries. Try:

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

NamingHelper is used in the Sugar ORM library to create tables and column names:

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

Answer:

SugarORM currently uses toSQLName() method of the StringUtil class to generate names for columns
For example in your case:

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

The other and neat way to do it would be to use the Select class:

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

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