2

我正在尝试添加 ID 号为 3791318595 的行。

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

但是 Jackcess 将其转换为整数并切至其最大值:

2,147,483,647。

如何使用 Jackcess 正确添加上述号码?

4

1 回答 1

3

如果 Access 表中的“id number”字段定义为,Number (Long Integer)那么对您的问题的简短回答是:

你不能。

Access 中的ALong Integer是一个 32 位有符号整数,如您所见,其最大值为 (2^31)-1。也就是说,Long IntegerAccess 中的 a 对应于 Java中的int(not )。long您尝试插入 Access 字段的值根本不适合“原样”,因此 Jackcess(或任何其他应用程序)无法做到这一点。

如果您的“id numbers”都是正整数,那么一种可能的解决方法是让您的代码模拟无符号32 位整数,方法是将 2,147,483,648 和 4,294,967,296 之间的值包装到它们的非正符号值:

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 表中,“id 号”为 -503,648,701。当然...

  1. 在检索行时由您的代码执行相应的转换,并且

  2. 这种方法对通过“id number”进行搜索和排序具有明显的意义

...但是如果“id 号”实际上只是一个唯一的行标识符,那么它可能不会带来太多的不便。

于 2014-02-28T10:17:56.960 回答