Если поле «идентификационный номер» в таблице доступа определено как 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. Конечно...
ваш код должен выполнить соответствующее преобразование при извлечении строк и
этот подход имеет очевидные последствия для поиска и упорядочения по «идентификационному номеру»
... но если «идентификационный номер» на самом деле просто уникальный идентификатор строки, то это может не доставлять особых неудобств.
person
Gord Thompson
schedule
28.02.2014