ORMLite не может сделать queryForId - PullRequest
3 голосов
/ 06 октября 2011

Я новичок в android и ormLite, и я просто пытаюсь сохранить данные и вернуть их снова с помощью queryForId.Сначала это работает хорошо, но как-то после того, как я немного повозился ... я получил исключение, в котором говорится, что у моего класса нет поля id.

вот код для класса

@DatabaseTable(tableName="ForeignData")
public class ForeignData implements Serializable {

  private static final long serialVersionUID = 3640428963380696279L;

  @DatabaseFieldId(generatedId = true)
  private Integer id;

  @DatabaseFieldSimple(defaultValue = "")
  private String name;

  public ForeignData(){};
}

и вот как я это называю ...

ForeignData f = new ForeignData();
try {
    Dao<ForeignData, Integer> fdao = new DatabaseHelper(getApplicationContext()).getForeignDao();
    f.setName("test");
    fdao.create(f);
    f = fdao.queryForId(f.getId())==null?f:fdao.queryForId(f.getId());
    txt1.setText(f.getName());                  
} catch (SQLException e) {
    txt1.setText(e.getMessage());
}

и это ловит исключение на

f = fdao.queryForId(f.getId())==null?f:fdao.queryForId(f.getId());

, которое не может запросить идентификатор, потому что у ForeignData нет идентификаторастолбец.

и если я изменю идентификатор в классе ForeignData на

 @DatabaseField(generatedId=true,columnName="id")
 private Integer id;

Исключение, которое я получаю, это "queryForOne из поля базы данных: SELECT * FROM 'ForeignData' WHERE 'id' =?«

Ответы [ 3 ]

2 голосов
/ 19 июня 2012

Вы можете изменить идентификатор в классе ForeignData на:

@DatabaseField(id = true)
private Integer id;
0 голосов
/ 14 декабря 2011

Другая возможность (для других пользователей, имеющих такую ​​же проблему).

OrmLite позволяет работать в «режиме файла конфигурации», чтобы повысить производительность. Чтобы проверить, используете ли вы этот режим, посмотрите на свой класс OrmLiteSqliteOpenHelper и посмотрите, какую версию супер-конструктора вы вызываете. Если вы даете ему configFileId, то вы находитесь в этом режиме.

Предполагая, что это так, убедитесь, что вы запустили свой класс OrmLiteConfigUtil как приложение Java для генерации файла конфигурации. Это необходимо делать КАЖДЫЙ раз, когда вы вносите изменения, связанные с ORM, в один из файлов вашей модели, поскольку он использует этот файл как источник правдивости для ваших моделей (он не проверяет файлы моделей на наличие аннотаций во время выполнения).

0 голосов
/ 06 октября 2011

Попробуйте удалить приложение с устройства и запустить его снова ... оно работает ....

Я думаю, что-то не так с функцией onUpgrade в моем databaseHelper, поэтому вопрос может быть не более актуальным ...

...