我的表中有两列是BigInt数据类型(NODEID和ULNODEID),我想保持这种状态。我正在为这些表使用MYSQL工作台8.0。
我想使用以下函数获取我的nodeid的值:
public long get_urlnodeid(long nodeID) {
try {
String sql = "select NODEID from urllink where ULNODEID="+nodeID;
if (em == null) {
throw new Exception("could not found URL object.");
}
return (long) em.createNativeQuery(sql).getSingleResult();
} catch (Exception e) {
msg = CoreUtil.wrapMsg(CoreUtil.FUNC_ERROR,
this.getClass().getName(), "get", e.getMessage());
}
return 0;
}
它抛出一个异常,说Big Integer cannot be cast to java.lang.Long
有什么方法可以将值保留在long
中吗?
答案 0 :(得分:3)
只需查看BigInteger的Java文档:
public long longValue()
将此BigInteger转换为long。此转换类似于Java™语言规范的5.1.3节中定义的从long到int的原始转换:如果此BigInteger太大而不能容纳long,则仅返回低阶64位。请注意,这种转换可能会丢失有关BigInteger值的整体大小的信息,并且会返回带有相反符号的结果。
所以您想要这样的东西:
return ((BigInteger)em.createNativeQuery(sql).getSingleResult()).longValue();
我建议添加一些类型检查。
-
如果您对应用程序有完全控制权,并且期望值超出long
范围,那么另一个选择是让您的方法返回BigInteger
而不是long
:
public BigInteger get_urlnodeid(long nodeID) {
并且:
return (BigInteger) em.createNativeQuery(sql).getSingleResult();
当然,然后,调用此方法的其余应用程序也必须与BigInteger
一起使用。
请注意,使用BigInteger
而不是long
的效果要差得多,因此,只有在性能不成问题或您绝对确定值会太大而不能使用时,才使用它绝对必要。