2014-02-24 32 views

回答

3

如果在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。當然...

  1. 它會到你的代碼檢索行時,執行相應的轉換,

  2. 這種方法也有由「身份證號」

  3. 用於搜索和排序明顯的影響

...但是如果「身份證號碼」實際上只是一個唯一的行標識符,那麼它可能不會太多的不便。