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>
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;
}