首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jackcess addRow()不能插入Java值

Jackcess addRow()不能插入Java值
EN

Stack Overflow用户
提问于 2014-02-24 09:51:43
回答 1查看 613关注 0票数 2

我正在尝试添加一个id号为3791318595的行。

代码语言:javascript
复制
long l = 3791318595L;
myTable.addRow(l,"testing");

然而,Jackcess将其转换为整数并削减到其最大值:

2 147 483 647。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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之间,使之变为它们的非正符号值:

代码语言:javascript
复制
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“进行搜索和排序具有明显的意义。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21984140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档