java- 类转换异常 - 大整数不能转换为长

我的表中有两列是大国际特数据类型(节点和 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


GCT1015
浏览 85回答 1
1回答

慕斯王

只要看看比格的Java文档:public long longValue()将此大整数转换为多头。此转换类似于 Java™ 语言规范第 5.1.3 节中定义的从长整型到 int 的缩小基元转换:如果此 BigInteger 太大而无法放入长整型,则仅返回低阶 64 位。请注意,此转换可能会丢失有关 BigInteger 值的总体大小的信息,并返回带有相反符号的结果。所以你会想要这样的东西:return ((BigInteger)em.createNativeQuery(sql).getSingleResult()).longValue();我建议添加一些类型检查。--如果您完全控制应用程序,并且希望值超出 的范围,则另一种选择是让方法返回而不是 :longBigIntegerlongpublic BigInteger get_urlnodeid(long nodeID) {和:return (BigInteger) em.createNativeQuery(sql).getSingleResult();当然,调用此方法的应用程序的其余部分也必须使用。BigInteger请注意,使用代替的性能要低得多,因此,仅当性能不是问题,或者您绝对确定值会非常大以至于绝对必要时,才使用此选项。BigIntegerlong
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java