亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

數據庫字段類型和java的對應關系

2024-07-21 02:51:36
字體:
來源:轉載
供稿:網友

由于 SQL 數據類型和 java 數據類型是不同的,因此需要某種機制在使用 Java 類型的應用程序和使用 SQL 類型的數據庫之間來讀寫數據。

為此,JDBC 提供了 getXXX 和 setXXX 方法集、方法 registerOutParameter 和類 Types。

JDBC 定義了一個從 JDBC 數據庫類型到 Java 類型的標準映射。例如,JDBC 的 INTEGER 類型通常映射為 Java 的 int 類型。這可支持簡單的接口,將 JDBC 值讀寫為簡單的 Java 類型。

Java 類型不必與 JDBC 類型完全形同;它們只須能夠用足夠的類型信息來代表 JDBC 類型,從而能正確地存儲和取出參數和從 SQL 語句恢復結果就可以了。例如,Java String 對象可能并不能精確地與任何 JDBC CHAR 類型匹配,但它卻可給出足夠的類型信息來成功地表示 CHAR、 VARCHAR 或 LONGVARCHAR 類型。

CHAR、 VARCHAR 和 LONGVARCHAR

JDBC 類型 CHAR 表示固定長度的小字符串,VARCHAR 表示長度可變的小字符串,而 LONGVARCHAR 表示長度可變的大字符串。

與 JDBC CHAR 對應的是 SQL CHAR 類型,所有主要的數據庫都支持它。支持長度達 254 個字符,例如 CHAR(12) 即定義了一個長度為 12 個字符的字符串。

與 JDBC VARCHAR 對應的是 SQL VARCHAR 類型,所有的主要數據庫都支持它。支持長度達 254 個字符,當把字符串的值賦給 VARCHAR 變量時,數據庫就記住該字符串的長度,使用 SELECT 時,它可以返回準確的原始字符串。

不幸的是,對于 JDBC LONGVARCHAR 類型,目前并沒有一致的 SQL 映射。

CHAR、VARCHAR 和 LONGVARCHAR 可映射為 String 或 char[],但 String 更適合于一般用法String 類能使 String 和 char[] 之間的轉換更為容易:它有一個用于將 String對象轉換為 char[] 的方法,還有一個將 char[] 轉換為 String 對象的構造函數。

方法 ResultSet.getString 用于從 CHAR、VARCHAR 和LONGVARCHAR 域中檢索數據。但如果用LONGVARCHAR 儲存好幾兆字節的字符串時,應將 LONGVARCHAR 值作為 Java 輸入流進行檢索,之后從流中以任意大小的塊來讀取數據。使用方法getAsciiStream 和 getUnicodeStream把儲存在 LONGVARCHAR 列的數據作為 Ascii 或 Unicode 字符流來傳送。

BINARY、VARBINARY 和 LONGVARBINARY

JDBC 類型BINARY 表示固定長度的小二進制值, VARBINARY 表示長度可變化的小二進制值,而 LONGVARBINARY 表示長度可變化的大二進制值。

不幸的是,這些不同 BINARY 類型的使用還未被標準化,因而在各種主要數據庫提供的支持有很大的不同。

在 Java 中,BINARY、VARBINARY 和 LONGVARBINARY 都可用同一 byte數組來表示。

檢索 BINARY 和 VARBINARY 值時,建議使用 ResultSet.getBytes。如果類型為 JDBC LONGVARBINARY 的某列儲存的是幾兆字節長度的字節數組,則建議用方法getBinaryStream 來檢索,為 Java 輸入流檢索,然后可從該流中以更小的塊來讀取。

BIT

JDBC 類型 BIT 代表一個位值,可為 0 或 1。目前只有一部份主流數據庫支持它。

JDBC BIT 類型的 Java 映射的推薦類型是 Java 布爾型。

TINYINT、SMALLINT

JDBC 類型 TINYINT 代表一個 8 位無符號整數,其值在 0 到 255 之間。 目前只有一部份的數據庫支持它。

JDBC 類型SMALLINT 代表一個 16 位的有符號整數,其值在 -32768 和 32767 之間。所有主流數據庫所廣為支持。

JDBC SMALLINT 類型的 Java 映射的推薦類型是16位的 Java short 類型。

INTEGER

JDBC 類型 INTEGER 代表一個 32 位的有符號整數,其值在 - 2147483648 和 2147483647 之間。所有的主流數據庫都至少支持 32 位。

INTEGER 類型 Java 映射的推薦類型是 Java int 類型。

BIGINT

JDBC 類型 BIGINT 代表一個 64 位的有符號整數,其值在 -9223372036854775808 和 9223372036854775807 之間。目前還沒有任何數據庫實現 SQL BIGINT 類型。

BIGINT 類型的 Java 映射的推薦類型是 Java long 類型。

REAL

JDBC 類型 REAL 代表一個有 7 位尾數的“單精度”浮點數。對應的 SQL 類型 REAL,主流數據庫都支持。

REAL 類型的 Java 映射的推薦類型為 Java float 類型。

DOUBLE

JDBC 類型 DOUBLE 代表一個有 15 位尾數的“雙精度”浮點數。對應的 SQL 類型是 DOUBLE PRECISION,主流數據庫都支持。

DOUBLE 類型的 Java 映射的推薦類型為 Java double 類型。

FLOAT

JDBC 類型 FLOAT 基本上與DOUBLE 相同,對應的 SQL 類型 FLOATFLOAT 代表一個有 15 位尾數的“雙精度”浮點數。同時提供了 FLOAT 和 DOUBLE,其目的是與以前的 API 實現一致。但這卻有可能產生誤導。由于 SQL FLOAT 和單精度的 Java float類型間可能產生混淆,因此建議選用 JDBC DOUBLE 類型而不用 FLOAT

FLOAT 類型的 Java 映射的推薦類型為 Java double 類型。

DECIMAL 和 NUMERIC

JDBC 類型 DECIMAL 和 NUMERIC 兩者非常相似。它們都表示固定精度的十進制值。

相應的 SQL 類型 DECIMAL 和 NUMERIC,得到廣泛支持。這些 SQL 類型都帶有精度和比例參數。精度是所支持的十進制數字的總位數,比例是小數點后的數字位數。比例必須永遠小于或等于精度。例如,值 "12.345" 有 5 位精度和 3 位比例,而值 ".11" 有 2 位精度和 2 位比例。JDBC 要求所有 DECIMAL 和 NUMERIC 類型都必須支持至少 15 位的精度和比例。

DECIMAL 和 NUMERIC 之間的唯一區別是NUMERIC 類型必須以確切指定的精度來表示,而 DECIMAL 類型允許動態添加額外的精度。因此,創建為類型 NUMERIC(12,4) 的列將總是用 12 位數來表示,而創建為類型 DECIMAL(12,4) 的列則可用更大的位數來表示。

DECIMAL 和 NUMERIC 類型的 Java 映射的推薦類型是 java.math.BigDecimal該 Java 類型也用絕對精度來表示定點數。java.math.BigDecimal 類型提供了一些數學操作,可對BigDecimal 類型與其它的 BigDecimal 類型、整數類型和浮點數類型進行加、減、乘、除的運算。

用于檢索 DECIMAL 和 NUMERIC 值的推薦方法是 ResultSet.getBigDecimal。也可用getString 來檢索 DECIMAL 或 NUMERIC 結果,也可用 Java 數值型類型。

 DATE、TIME 和 TIMESTAMP

有三種 JDBC 類型與時間有關:

JDBC DATE 類型表示一個由年、月、日組成的日期。對應的是 SQL DATE 類型,但只有一部份主流數據庫實現它。JDBC TIME 類型表示一個由小時、分鐘和秒組成的時間。對應的是 SQL TIME 類型,但只有一部份主流數據庫實現它。JDBC TIMESTAMP 類型表示 DATE 加上 TIME,外加一個納秒域。對應的 TIMESTAMP 類型,但只有少數幾個數據庫實現它。

由于標準的 Java 類 java.util.Date 并不與這三個 JDBC 日期—時間類型完全匹配(它含有 DATE 和 TIME 的信息但不含納秒信息),因此 JDBC 定義了三個 java.util.Date 的子類與 SQL 類型對應。它們是:

java.sql.Date,對應于 SQL DATE 信息。java.util.Date 基本類中的小時、分鐘和秒都設為 0。java.sql.Time,對應于 SQL TIME 信息。java.util.Date 基本類中的年、月、日域設為 1970 年 1 月 1 日。這是 Java 紀元的“零”日期。java.sql.Timestamp,對應于 SQL TIMESTAMP 信息。該類擴展了 java.util.Date,添加了納秒域。

下述代碼段將 java.sql.Timestamp 對象轉換為精度達到毫秒量級的 java.util.Date 對象:

    Timestamp t = new Timestamp(100, 0, 1, 15, 45, 29, 987245732);    java.util.Date d;    d = new java.util.Date(t.getTime() + (t.getNanos() / 1000000));

動態數據存取

大多數時候,用戶要存取的結果和參數其數據類型在編譯時是已知的。然而,有些應用程序(例如普通的瀏覽器或查詢工具)在編譯時對它們所要存取的數據庫的機制并不知曉。

有三種方法和一個常量可用于訪問那些在編譯時其數據類型尚屬未知的值:

ResultSet.getObject PreparedStatement.setObject CallableStatement.getObject java.sql.Types.OTHER (用作 CallableStatement.registerOutParameter 的一個變量)  

例如,如果應用程序想要接受多種類型作為其 ResultSet 對象中的結果,它可以使用 ResultSet.getObject 方法。

ResultSet.getObject 和 CallableStatement.getObject 方法將值檢索為 Java Object。由于 Object 是所有 Java 對象的基本類,因此可將任何 Java 類的實例檢索為 Object 的實例。然而,以下 Java 類型是內置的“基本”類型,它們不是類 Object 的實例: boolean、char、byteshort、int、long、 float 和 double。因此,不能用 getObject 方法來檢索它們。然而,這些基本類型每種都有相應的可用作 wrapper 的類。這些類的實例是對象,這意味著可用 ResultSet.getObject 和 CallableStatement.getObject 方法來檢索它們。顯示了從 JDBC 類型到 Java Object 類型的映射。該表與 JDBC 類型到 Java 類型的標準映射不同:在該表中,除了 JDBC TINYINT 和 JDBC SMALLINT 類型映射為 Java 類Integer 之外,每一個基本的 Java 類型都被替換為它們的 wrapper 類。

方法 getObject 還可用于檢索用戶定義的 Java 類型。隨著抽象數據類型(ADT)和其它用戶定義的類型在某些數據庫系統中的出現,一些提供者可能會發現用 getObject 來檢索這些類型將更方便。

數據類型映射表

從 JDBC 類型映射到 Java 類型

JDBC 類型Java 類型
CHARString
VARCHARString
LONGVARCHARString
NUMERICjava.math.BigDecimal
DECIMALjava.math.BigDecimal
BITboolean
TINYINTbyte
SMALLINTshort
INTEGERint
BIGINTlong
REALfloat
FLOATdouble
DOUBLEdouble
BINARYbyte[]
VARBINARYbyte[]
LONGVARBINARYbyte[]
DATEjava.sql.Date
TIMEjava.sql.Time
TIMESTAMPjava.sql.Timestamp

從 Java 類型映射到 JDBC 類型

Java 類型JDBC 類型
StringVARCHAR 或 LONGVARCHAR
java.math.BigDecimalNUMERIC
booleanBIT
byteTINYINT
shortSMALLINT
intINTEGER
longBIGINT
floatREAL
doubleDOUBLE
byte[]VARBINARY 或 LONGVARBINARY
java.sql.DateDATE
java.sql.TimeTIME
java.sql.TimestampTIMESTAMP

從 JDBC 類型到 Java Object 類型的映射

JDBC 類型Java Object 類型
CHARString
VARCHARString
LONGVARCHARString
NUMERICjava.math.BigDecimal
DECIMALjava.math.BigDecimal
BITBoolean
TINYINTInteger
SMALLINTInteger
INTEGERInteger
BIGINTLong
REALFloat
FLOATDouble
DOUBLEDouble
BINARYbyte[]
VARBINARYbyte[]
LONGVARBINARYbyte[]
DATEjava.sql.Date
TIMEjava.sql.Time
TIMESTAMPjava.sql.Timestamp

Java Object 類型映射到 JDBC 類型

Java Object 類型JDBC 類型
StringVARCHAR 或 LONGVARCHAR
java.math.BigDecimalNUMERIC
BooleanBIT
IntegerINTEGER
LongBIGINT
FloatREAL
DoubleDOUBLE
byte[]VARBINARY 或 LONGVARBINARY
java.sql.DateDATE
java.sql.TimeTIME
java.sql.TimestampTIMESTAMP

 

由 setObject 所進行的轉換

 TINYINTSMALLINTINTEGERBIGINTREALFLOATDOUBLEDECIMALNUMERICBITCHARVARCHARLONGVARCHARBINARYVARBINARYLONGVARBINARYDATETIMETIMESTAMP
Stringxxxxxxxxxxxxxxxxxxx
java.math.BigDecimalxxxxxxxxxxxxx      
Booleanxxxxxxxxxxxxx      
Integerxxxxxxxxxxxxx      
Longxxxxxxxxxxxxx      
Floatxxxxxxxxxxxxx      
Doublexxxxxxxxxxxxx      
byte[]             xxx   
java.sql.Date          xxx   x x
java.sql.Time          xxx    x 
java.sql.Time- stamp          xxx   xxx

由 ResultSet.getXXX 方法檢索的 JDBC 類型

"x" 表示該方法可以檢索 JDBC 類型。"X" 表示建議使用該方法來檢索該 JDBC 類型。

 TINYINTSMALLINTINTEGERBIGINTREALFLOATDOUBLEDECIMALNUMERICBITCHARVARCHARLONGVARCHARBINARYVARBINARYLONGVARBINARYDATETIMETIMESTAMP
getByteXxxxxxxxxxxxx      
getShortxXxxxxxxxxxxx      
getIntxxXxxxxxxxxxx      
getLongxxxXxxxxxxxxx      
getFloatxxxxXxxxxxxxx      
getDoublexxxxxXXxxxxxx      
getBigDecimalxxxxxxxXXxxxx      
getBooleanxxxxxxxxxXxxx      
getStringxxxxxxxxxxXXxxxxxxx
getBytes             XXx   
getDate          xxx   X x
getTime          xxx    Xx
getTimestamp          xxx   x X
getAsciiStream          xxXxxx   
getUnicodeStream          xxXxxx   
getBinaryStream             xxX   
getObjectxxxxxxxxxxxxxxxxxxx

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品日韩在线播放| 欧美激情免费观看| 日韩中文字幕第一页| 98精品国产高清在线xxxx天堂| 成人疯狂猛交xxx| 4p变态网欧美系列| 亚洲第一页自拍| 91av在线国产| 日韩视频免费在线| 国产精品福利在线| 亚洲老司机av| 亚洲第一网站免费视频| 欧美高清电影在线看| 亚洲精品国产精品国产自| 欧美日韩在线免费观看| 在线成人中文字幕| 亚洲视频免费一区| 国产精品久久久久久久久久久不卡| 日韩精品亚洲精品| 欧美国产日韩一区| 欧美综合国产精品久久丁香| 欧美大肥婆大肥bbbbb| 91av福利视频| 国内精品视频在线| 亚洲欧洲激情在线| 91沈先生在线观看| 欧美在线免费视频| 一区国产精品视频| 精品亚洲一区二区| 欧美色视频日本版| 久久99热精品这里久久精品| 欧美性xxxx极品高清hd直播| 中文字幕精品久久久久| wwwwwwww亚洲| 午夜精品一区二区三区视频免费看| 亚洲第一区在线| 欧美日韩免费在线| 久久综合久中文字幕青草| 深夜福利一区二区| 一区二区三区无码高清视频| 欧美成人精品一区二区| 在线精品国产成人综合| 成人a级免费视频| 亚洲午夜国产成人av电影男同| 亚洲无线码在线一区观看| 欧美成人午夜剧场免费观看| 国产精品入口尤物| 国产精品影院在线观看| 欧美午夜片在线免费观看| 成人a级免费视频| 国产成人精品视| 精品在线观看国产| 欧美日韩在线影院| 日韩av大片在线| 亚洲在线免费观看| 久久久久久亚洲精品不卡| 在线a欧美视频| 成人高清视频观看www| 欧美精品第一页在线播放| 亚洲天堂成人在线视频| 色噜噜狠狠狠综合曰曰曰88av| 91av在线网站| 欧美激情免费看| 高清欧美性猛交xxxx黑人猛交| 麻豆国产精品va在线观看不卡| 精品国产乱码久久久久久天美| 色婷婷久久一区二区| 久久久午夜视频| 国产精品狼人色视频一区| **欧美日韩vr在线| 91精品久久久久久久久久| 久久精品小视频| 最近2019年日本中文免费字幕| 欧美性色视频在线| 中文字幕亚洲第一| 欧美第一黄色网| 国产精品人成电影| 欧美日韩一区二区免费视频| 成人久久久久久| 国产日韩精品一区二区| 欧美大片在线看免费观看| 日韩美女在线观看一区| 亚洲成人免费网站| 国模视频一区二区三区| 亚洲人成在线电影| 中文字幕亚洲综合久久| 一区二区三区视频免费在线观看| 亚洲午夜国产成人av电影男同| 2025国产精品视频| 日韩免费av片在线观看| 国产精品av网站| 欧美电影在线播放| zzijzzij亚洲日本成熟少妇| 亚洲丁香久久久| 中文字幕在线亚洲| 欧美色播在线播放| 亚洲成人激情小说| 精品久久香蕉国产线看观看gif| 久久精品国产久精国产一老狼| 欧美在线激情网| 久久伊人精品天天| 亚洲女人被黑人巨大进入al| 欧美精品videosex性欧美| 亚洲国产精品一区二区三区| 午夜精品久久久久久99热软件| 日本免费在线精品| 在线亚洲午夜片av大片| 97超碰国产精品女人人人爽| 欧美日韩亚洲视频| 久久久久久国产精品三级玉女聊斋| 亚洲丝袜av一区| 91精品国产自产在线观看永久| 亚洲大胆美女视频| 亚洲欧美日韩中文在线| 国产精品人人做人人爽| 欧美精品18videosex性欧美| 欧美日韩福利在线观看| 91精品国产99久久久久久| 成人免费网视频| 日韩成人激情在线| 日韩电影第一页| 亚洲国产97在线精品一区| 国产一区二区三区四区福利| 国产精品成久久久久三级| 欧美成人激情图片网| 两个人的视频www国产精品| 日韩电影中文字幕在线观看| 91精品视频免费看| 韩剧1988免费观看全集| 啪一啪鲁一鲁2019在线视频| 日韩精品小视频| 国产精品视频久久久| 国产日产亚洲精品| 亚洲国产欧美一区二区三区同亚洲| 北条麻妃一区二区在线观看| 日韩视频亚洲视频| 久久久噜噜噜久久久| 97国产在线观看| 日韩美女免费观看| 国产精品成人一区二区三区吃奶| 国产一区二区三区在线看| 8090成年在线看片午夜| 国产美女精品免费电影| 秋霞av国产精品一区| 亚洲片国产一区一级在线观看| 97精品在线视频| 97在线视频免费播放| 日韩在线观看网站| 欧美在线日韩在线| 精品日韩视频在线观看| 高清欧美性猛交xxxx黑人猛交| 日韩精品在线影院| 亚洲精品理论电影| 亚洲国产精品专区久久| 精品久久中文字幕| 国产成人亚洲综合| 少妇精69xxtheporn| 成人亚洲欧美一区二区三区| 日韩精品极品在线观看播放免费视频| 欧美理论电影网| 亚州国产精品久久久| 日韩久久精品电影| 国产精品九九久久久久久久| 欧美怡春院一区二区三区|