JDBC數據類型
JDBC驅動程序將Java數據類型轉換爲適當的JDBC類型,然後將其發送到數據庫。 它爲大多數數據類型提供並使用默認映射。 例如,Java int
類型會被轉換爲SQL INTEGER
。 創建默認映射以提供到驅動程序時保持一致性。
下表總結了當調用PreparedStatement
或CallableStatement
對象或ResultSet.updateXXX()
方法的setXXX()
方法時,將Java數據類型轉換爲的默認JDBC數據類型。
SQL類型
JDBC/Java類型
setXXX
updateXXX
VARCHAR
java.lang.String
setString
updateString
CHAR
java.lang.String
setString
updateString
LONGVARCHAR
java.lang.String
setString
updateString
BIT
boolean
setBoolean
updateBoolean
NUMERIC
java.math.BigDecimal
setBigDecimal
updateBigDecimal
TINYINT
byte
setByte
updateByte
SMALLINT
short
setShort
updateShort
INTEGER
int
setInt
updateInt
BIGINT
long
setLong
updateLong
REAL
float
setFloat
updateFloat
FLOAT
float
setFloat
updateFloat
DOUBLE
double
setDouble
updateDouble
VARBINARY
byte[ ]
setBytes
updateBytes
BINARY
byte[ ]
setBytes
updateBytes
DATE
java.sql.Date
setDate
updateDate
TIME
java.sql.Time
setTime
updateTime
TIMESTAMP
java.sql.Timestamp
setTimestamp
updateTimestamp
CLOB
java.sql.Clob
setClob
updateClob
BLOB
java.sql.Blob
setBlob
updateBlob
ARRAY
java.sql.Array
setARRAY
updateARRAY
REF
java.sql.Ref
SetRef
updateRef
STRUCT
java.sql.Struct
SetStruct
updateStruct
JDBC 3.0增強了對BLOB
,CLOB
,ARRAY
和REF
數據類型的支持。 ResultSet
對象現在具有updateBLOB()
,updateCLOB()
,updateArray()
和updateRef()
方法,使您能夠直接操作數據庫服務器上的相應數據。
setXXX()
和updateXXX()
方法可以將特定的Java類型轉換爲特定的JDBC數據類型。 方法setObject()
和updateObject()
可以將幾乎任何Java類型映射到JDBC數據類型。
ResultSet
對象爲每個數據類型提供相應的getXXX()
方法來檢索列值。每個方法都可以使用列名或其序數位置來檢索列值。
SQL類型
JDBC/Java類型
setXXX
updateXXX
VARCHAR
java.lang.String
setString
getString
CHAR
java.lang.String
setString
getString
LONGVARCHAR
java.lang.String
setString
getString
BIT
boolean
setBoolean
getBoolean
NUMERIC
java.math.BigDecimal
setBigDecimal
getBigDecimal
TINYINT
byte
setByte
getByte
SMALLINT
short
setShort
getShort
INTEGER
int
setInt
getInt
BIGINT
long
setLong
getLong
REAL
float
setFloat
getFloat
FLOAT
float
setFloat
getFloat
DOUBLE
double
setDouble
getDouble
VARBINARY
byte[ ]
setBytes
getBytes
BINARY
byte[ ]
setBytes
getBytes
DATE
java.sql.Date
setDate
getDate
TIME
java.sql.Time
setTime
getTime
TIMESTAMP
java.sql.Timestamp
setTimestamp
getTimestamp
CLOB
java.sql.Clob
setClob
getClob
BLOB
java.sql.Blob
setBlob
getBlob
ARRAY
java.sql.Array
setARRAY
getARRAY
REF
java.sql.Ref
SetRef
getRef
STRUCT
java.sql.Struct
SetStruct
getStruct
日期和時間數據類型
java.sql.Date
類映射到SQL DATE
類型,java.sql.Time
和java.sql.Timestamp
類分別映射到SQL TIME
和SQL TIMESTAMP
數據類型。
以下示例顯示了Date
和Time
類如何格式化爲標準Java日期和時間值以匹配SQL數據類型要求。
import java.sql.Date;
import java.sql.Time;
import java.sql.Timestamp;
import java.util.*;
public class SqlDateTime {
public static void main(String[] args) {
//Get standard date and time
java.util.Date javaDate = new java.util.Date();
long javaTime = javaDate.getTime();
System.out.println("The Java Date is:" +
javaDate.toString());
//Get and display SQL DATE
java.sql.Date sqlDate = new java.sql.Date(javaTime);
System.out.println("The SQL DATE is: " +
sqlDate.toString());
//Get and display SQL TIME
java.sql.Time sqlTime = new java.sql.Time(javaTime);
System.out.println("The SQL TIME is: " +
sqlTime.toString());
//Get and display SQL TIMESTAMP
java.sql.Timestamp sqlTimestamp =
new java.sql.Timestamp(javaTime);
System.out.println("The SQL TIMESTAMP is: " +
sqlTimestamp.toString());
}//end main
}//end SqlDateTime
編譯並執行上面代碼,得到以下結果 -
F:\worksp\jdbc>javac SqlDateTime.java
F:\worksp\jdbc>java SqlDateTime
The Java Date is:Wed May 31 23:54:57 CST 2017
The SQL DATE is: 2017-05-31
The SQL TIME is: 23:54:57
The SQL TIMESTAMP is: 2017-05-31 23:54:57.937
F:\worksp\jdbc>
處理NULL值
SQL使用NULL
值和Java使用null
是不同的概念。 所以,要在Java中處理SQL NULL
值,可以使用三種策略 -
- 避免使用返回原始數據類型的
getXXX()
方法。 - 對原始數據類型使用包裝類,並使用
ResultSet
對象的wasNull()
方法來測試接收getXXX()
方法的返回值的包裝器類變量是否應設置爲null
。 - 使用原始數據類型和
ResultSet
對象的wasNull()
方法來測試接收到由getXXX()
方法返回的值的原始變量是否應設置爲表示NULL
的可接受值。
下面是一個用來處理NULL
值的例子 -
Statement stmt = conn.createStatement( );
String sql = "SELECT id, first, last, age FROM Employees";
ResultSet rs = stmt.executeQuery(sql);
int id = rs.getInt(1);
if( rs.wasNull( ) ) {
id = 0;
}