Сохранить новый объект в таблицу (StorIO)

Я хочу сохранить все объекты ReportDB как новую строку в БД

 App.get(context)
    .getStorIO()
    .put()
    .object(new ReportDB(keyStore.getKeyCategoryId(), keyStore.getKeyShelfId()))
    .prepare()
    .asRxObservable().subscribe(putResult -> ZLog.d("insertedId = "+putResult.insertedId()),
            throwable -> ZLog.d("throwable = ",throwable));

ReportDB является

@StorIOSQLiteColumn(name = ReportTable.COLUMN_ID,key = true)
long id;

@StorIOSQLiteColumn(name = ReportTable.CATEGORY_ID_I)
long categoryId;

@StorIOSQLiteColumn(name = ReportTable.SHELF_ID_I)
long shelfId;

@StorIOSQLiteColumn(name = ReportTable.LATITUDE_R)
double latitude;

@StorIOSQLiteColumn(name = ReportTable.LONGITUDE_R)
double longitude;

public ReportDB(long categoryId, long shelfId) {
    this.categoryId = categoryId;
    this.shelfId = shelfId;
}

Но теперь, после запуска кода дважды, у меня есть только одна строка и журналы

 insertedId = 0
 insertedId = null

Как автоматически увеличить идентификатор?

1 ответ

StorIO не управляет схемой таблиц за вас, он просто привязывается к существующей базе данных и работает с ней, поэтому у вас есть 2 способа добиться автоинкрементного столбца:

  1. Создать столбец как INTEGER NOT NULL PRIMARY KEY
  2. Увеличивайте счетчик себя в PutResolver вашей сущности (не забудьте о переносе этого кода в транзакцию!)

Я бы предложил использовать 1-й вариант, потому что он будет работать быстрее, и вам не нужно писать какой-либо код для этого -> сложнее сделать ошибку:)

Другие вопросы по тегам