Как установить идентификатор записи самостоятельно в J2ME

Я использую RecordStore для хранения своих данных.

Я знаю, что когда мы сохраняем данные в RecordStore, он автоматически генерирует идентификатор записи для каждой записи.

Но как я могу установить идентификатор записи самостоятельно? Или как я могу получить идентификатор записи?

Потому что я хочу использовать метод recordstore.setRecord(..) для обновления моего хранилища записей.

Но когда я использую RecordEnumeration для получения RecordStore и использую метод nextRecordId(), он просто показывает нечетные или четные идентификаторы. Я имею в виду, когда у меня есть 8 записей, он просто печатает только нечетные или четные записи, например

2 4 6 8

Мой код:

    handleRecord.openRecordStore(handleRecord.getRecordName());
    RecordEnumeration re;
    try {
         int rc = handleRecord.getRecordStore().getNumRecords();
         re = hrs.getRcs().enumerateRecords(null, null, true);

         while(re.hasNextElement()) {
             int rid = re.nextRecordId();
             System.out.println(rid);
         }
    } catch(Exception e) {
        System.out.println(e.toString());
    }

person MYE    schedule 07.10.2011    source источник
comment
из того, что вы описываете, похоже, что у вас есть простая ошибка в цикле - перескакивание по записям. Пожалуйста, покажите код, который вы используете для итерации RecordEnumeration   -  person gnat    schedule 07.10.2011


Ответы (1)


MIDP API не имеет способа установить идентификатор записи самостоятельно.

См. API RecordStore. документация для объяснения того, как это должно работать.

  • "Записи однозначно идентифицируются в данном хранилище записей по их идентификатору записи, который представляет собой целочисленное значение. Этот идентификатор записи используется в качестве первичного ключа для записей. Первая запись, созданная в хранилище записей, будет иметь идентификатор записи, равный единице ( 1). Каждой последующей записи, добавляемой в RecordStore, будет присвоен идентификатор записи, на единицу больший, чем запись, добавленная перед ней. То есть, если две записи добавляются в хранилище записей, и первая имеет идентификатор записи «n», следующая будет иметь идентификатор записи 'n + 1'..."

Код, который повторяет хранилище, выглядит нормально:

     re = hrs.getRcs().enumerateRecords(null, null, true);
     while(re.hasNextElement()) {
         int rid = re.nextRecordId();
         System.out.println(rid);
     }

если в результате вы получаете только нечетную или четную запись, например 2-4-6... или 1-3-5..., первое, что нужно проверить, это то, что вы каким-то образом удалили записи которые «отсутствуют» - это можно сделать, например, с помощью метода RecordStore.getVersion:

  • "Каждый раз, когда хранилище записей изменяется (методами addRecord, setRecord или deleteRecord), его версия увеличивается. Это может использоваться мидлетами, чтобы быстро определить, было ли что-то изменено..."
person gnat    schedule 10.10.2011