Jackcess addRow() не может вставить длинное значение Java

Я пытаюсь добавить строку с идентификатором 3791318595.

long l = 3791318595L;
myTable.addRow(l,"testing");

однако Jackcess преобразует его в целое число и сокращает до максимального значения:

2,147,483,647.

Как я могу правильно добавить указанный выше номер с помощью Jackcess?


person dendini    schedule 24.02.2014    source источник


Ответы (1)


Если поле «идентификационный номер» в таблице доступа определено как Number (Long Integer), тогда краткий ответ на ваш вопрос:

Вы не можете.

Long Integer в Access — это 32-битное целое число со знаком, максимальное значение которого равно (2^31)-1, как вы видели. То есть Long Integer в Access соответствует int (а не long) в Java. Значение, которое вы пытаетесь вставить в поле «Доступ», просто не будет соответствовать «как есть», поэтому Jackcess (или любое другое приложение) не сможет это сделать.

Если все ваши «идентификационные числа» являются положительными целыми числами, то одним из возможных обходных путей может быть то, что ваш код имитирует беззнаковые 32-битные целые числа, перенося значения от 2 147 483 648 до 4 294 967 296 в их неположительные знаковые< /em> значения:

long unsignedAdjustment = 4294967296L;  // 2^32
long l = 3791318595L;  // our test value
if (l > unsignedAdjustment) {
    System.out.println("Error: ID value too large to fit, even if wrapped to non-positive integer.");
}
else {
    int signedID = 0;
    if (l > 2147483647L) {  // (2^31)-1
        signedID = (int) (l - unsignedAdjustment);
    }
    else {
        signedID = (int) l;
    }
    myTable.addRow(signedID, "testing");
}

Это сохранит строку в таблице Access с «идентификационным номером» -503 648 701. Конечно...

  1. ваш код должен выполнить соответствующее преобразование при извлечении строк и

  2. этот подход имеет очевидные последствия для поиска и упорядочения по «идентификационному номеру»

... но если «идентификационный номер» на самом деле просто уникальный идентификатор строки, то это может не доставлять особых неудобств.

person Gord Thompson    schedule 28.02.2014