gpt4 book ai didi

java - Jackcess addRow() 无法插入 Java 'long' 值

转载 作者:行者123 更新时间:2023-11-30 08:25:49 24 4
gpt4 key购买 nike

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

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

然而 Jackcess 将其转换为整数并截取其最大值:

2,147,483,647。

如何使用 Jackcess 正确添加上述数字?

最佳答案

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

你不能。

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

如果您的“身份证号码”都是正整数,那么一种可能的解决方法是让您的代码模拟无符号 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");
}

这会将“id 号”为 -503,648,701 的行存储在 Access 表中。当然……

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

  2. 这种方法对于按“身份证号”进行搜索和排序具有明显的意义

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

关于java - Jackcess addRow() 无法插入 Java 'long' 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21984140/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com