我正在尝试添加一个id号为3791318595的行。
long l = 3791318595L;
myTable.addRow(l,"testing");然而,Jackcess将其转换为整数并削减到其最大值:
2 147 483 647。
如何使用Jackcess正确地添加上述数字?
发布于 2014-02-28 10:17:56
如果Access表中的"id number“字段定义为Number (Long Integer),那么对您的问题的简短回答是:
你不能这么做。
Access中的Long Integer是一个32位有符号整数,其最大值为(2^31)-1。也就是说,Access中的Long Integer对应于Java中的int (而不是long)。您试图插入访问字段的值将不符合“原样”,因此Jackcess (或任何其他应用程序)无法做到这一点。
如果您的"id数字“都是正整数,那么一种可能的解决方法是让代码模拟无符号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。当然..。
...but如果"id号“实际上只是一个唯一的行标识符,那么它可能不会带来太大的不便。
https://stackoverflow.com/questions/21984140
复制相似问题