我的表中有两列是大国际特数据类型(节点和 ULNODEID),我想保持这种方式。我正在为这些表使用MYSQL工作台8.0。我想使用以下函数获取我的节点ID的值: 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
1 回答
慕斯王
TA贡献1864条经验 获得超2个赞
只要看看比格的Java文档:
public long longValue()
将此大整数转换为多头。此转换类似于 Java™ 语言规范第 5.1.3 节中定义的从长整型到 int 的缩小基元转换:如果此 BigInteger 太大而无法放入长整型,则仅返回低阶 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
添加回答
举报
0/150
提交
取消