簡體   English   中英

java- ClassCastException- BigInt無法轉換為Long

[英]java- ClassCastException- BigInt cannot be cast to Long

我的表中有兩列是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的值?

只需查看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會降低性能,因此僅在性能不成問題或您絕對確定值會很大以至於絕對必要時才使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM