2016-09-24 4 views
0

Я пытаюсь создать и получить некоторые данные в базе данных Android SQLite.queryForAll возвращает null идентификаторы с ORMLite Android

Когда я добавляю данные с помощью , создайте метод, объекты будут правильно обновлены (задан длинный идентификатор). Но тогда, когда я беру данные с помощью метода queryAll, объекты возвращаются правильно, за исключением атрибута id, который приходит как null. Я использую DatabaseField тег с generatedId атрибут установлен в истинное, так же, как говорится в документации:

generatedId

Boolean ли поле является полем идентификатор генерируется автоматически. По умолчанию false. Только одно поле может иметь этот набор в классе. Это сообщает базе данных , чтобы автоматически генерировать соответствующий идентификатор для каждой вставленной строки. Когда объект сгенерированным идентификатором создается с использованием метода Dao.create() , база данных будет генерировать идентификатор для строки, которая будет возвращена и задана в объекте методом create. В некоторых базах данных требуются последовательности для сгенерированных идентификаторов, и в этом случае имя последовательности будет автоматически сгенерировано. Чтобы указать имя последовательности, используйте createdIdSequence. Только один из этих, id и сгенерированный идентификатор может быть указан . См. Раздел Поля With generatedId.

Там мой класс:

@DatabaseTable(tableName = "LANGUAGE") 
public class Language { 

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

    @DatabaseField(columnName = "language_locale") 
    private String locale; 

    @DatabaseField(columnName = "language_active") 
    private boolean active; 

    @DatabaseField(columnName = "language_name") 
    private String name; 

    // getters and setters... 

} 

Я вставляя данные, как это:

Language pt = new Language(); 
pt.setActive(true); 
pt.setName("Português"); 
pt.setLocale("pt_PT"); 
dao.create(pt); 

Language en = new Language(); 
en.setActive(true); 
en.setName("English"); 
en.setLocale("en_EN"); 
dao.create(en); 

// here, both pt and en have an id, 1 and 2, respectively 

Но когда я исполню

dao.queryForAll() 

локали, активные и имя атрибуты приходит нормально, но id равно null.

Любые идеи? Я уже пытался позвонить совершить после создать, но ничего не меняется.

+0

Вы уверены, что ваш файл конфигурации базы данных полностью обновлен? Я никогда не видел и не слышал об этом, особенно в поле id. Работает ли 'dao.queryForId (...)', но не заполняет идентификатор? – Gray

+0

queryForId (передача id 1, например) возвращает null.Это очень странно, кажется, что метод create выполняет эту работу, но тогда база данных хранит объект без id ... для моего опыта я должен иметь небольшую ошибку и только найду его через try-error ... любая помощь оценивается – rmpt

+0

И идентификаторы назначаются правильно/последовательно с помощью метода create, поэтому кажется, что сущности фактически находятся в базе данных. Считаете ли вы, что это может быть проблема с кешем? – rmpt

ответ

0

И, наконец, получил его на работу. Гость, что? Просто очистите данные и снимите приложение, и вы готовы к работе. Не спрашивайте меня, почему, но это должно быть связано с аннотацией id. Сначала я использовал:

@DatabaseField(id = true, allowGeneratedIdInsert = true, columnName = "language_id") 

Давать ошибку, то я изменил к другой комбинации и где-то в середине база данных должна быть создана с некоторыми свойствами. Затем я изменил его на конфигурацию, указанную в моем вопросе, но не работал, как я объяснил. После очистки приложения на моем телефоне все должно было быть создано с нуля, и база данных, наконец, была создана с правильными свойствами.

Итак, если в будущем ваша база данных не сохраняет или не загружает данные правильно, просто снимите и удалите приложение.