首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

JFinal 與 MySQL 整數型別對應陷阱:UNSIGNED 需用 getLong()

     編輯:MySQL 綜合教學

JFinal 與 MySQL 整數型別對應陷阱:UNSIGNED 需用 getLong()

問題背景

JFinal 中 getInt() / getLong() 對應 MySQL INT 型別時,UNSIGNED 屬性決定呼叫哪個方法,用錯會拋型別不匹配錯誤。


MySQL INT 型別範圍

屬性 範圍 位元組
SIGNED (預設) -2,147,483,648 ~ 2,147,483,647 4
UNSIGNED 0 ~ 4,294,967,295 4

顯示寬度 M 的意義

  • INT(11):SIGNED 最大 10 位數 + 1 位負號 = 11,合理
  • INT(11) UNSIGNED:最大 10 位數,M=11 無意義,專業寫法應為 INT(10) UNSIGNED

JFinal 方法定義

/** MySQL: int, integer, tinyint(n>1), smallint, mediumint */
public Integer getInt(String attr) { return (Integer)attrs.get(attr); }

/** MySQL: bigint, unsigned int */
public Long getLong(String attr) { return (Long)attrs.get(attr); }

Java int 範圍驗證

System.out.println(Integer.MAX_VALUE);  // 2,147,483,647
// 4,294,967,295 > Integer.MAX_VALUE → 需用 Long

對應規則速查表

MySQL 定義 JFinal 呼叫 原因
INT / INT SIGNED getInt() 範圍在 Java int 內
INT UNSIGNED getLong() 最大值 42.9 億 > int 上限 21.4 億
BIGINT getLong() 64 位整數

最佳實踐建議

  1. **資料庫設計階段**決定是否 UNSIGNED,同步告知開發端
  2. 代碼中**統一用 getLong() 讀取所有整數 ID** 最保險(效能差異可忽略)
  3. 若確定無 UNSIGNED,可用 getInt() 節省記憶體
  4. 參考:MySQL 數據類型深度解析

💡 一句話心法:MySQL INT UNSIGNED 超出 Java int 範圍,**JFinal 必須用 getLong()**,否則溢位報錯。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved