我想添加一行ID號3791318595.Jackcess addRow()不能將Java「長」值
long l = 3791318595L;
myTable.addRow(l,"testing");
但是Jackcess將其轉換成整數,並削減到最大值:
2,147,483,647。
如何正確添加上面的數字與Jackcess?
我想添加一行ID號3791318595.Jackcess addRow()不能將Java「長」值
long l = 3791318595L;
myTable.addRow(l,"testing");
但是Jackcess將其轉換成整數,並削減到最大值:
2,147,483,647。
如何正確添加上面的數字與Jackcess?
如果在Access表中的「身份證號」字段定義爲Number (Long Integer)
,則簡短的回答你的問題是:
你不能。
A Long Integer
in Access是一個32位有符號整數,其最大值爲(2^31)-1,如您所見。也就是說,Access中的Long Integer
對應於Java中的int
(不是long
)。您試圖插入到Access字段中的值根本不適合「原樣」,因此Jackcess(或任何其他應用程序)無法做到這一點。
如果你的「ID號」均爲正整數那麼一個可能的解決方法是通過包裝2,147,483,648和4,294,967,296之間的值,讓你的代碼模仿無符號 32位整數,其非正簽署值:
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");
}
這將存儲訪問表中的行與「ID號」-503,648,701。當然...
它會到你的代碼檢索行時,執行相應的轉換,
這種方法也有由「身份證號」
...但是如果「身份證號碼」實際上只是一個唯一的行標識符,那麼它可能不會太多的不便。