JDBC 驅(qū)動程序在將 Java 數(shù)據(jù)類型發(fā)送到數(shù)據(jù)庫之前,會將其轉(zhuǎn)換為相應的 JDBC 類型。對于大多數(shù)數(shù)據(jù)類型都采用了默認的映射關(guān)系。例如,一個 Java int 數(shù)據(jù)類型轉(zhuǎn)換為 SQL INTEGER。通過默認的映射關(guān)系來提供驅(qū)動程序之間的一致性。
當你調(diào)用 PreparedStatement 中的 setXXX()方法或 CallableStatement 對象或 ResultSet.updateXXX()方法時, Java 數(shù)據(jù)類型會轉(zhuǎn)換為默認的 JDBC 數(shù)據(jù)類型,如下表概述。
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 數(shù)據(jù)類型的支持。 ResultSet 對象現(xiàn)在有 UPDATEBLOB(),updateCLOB(), updateArray(),和 updateRef()方法,通過這些方法你可以直接操作服務器上的相應數(shù)據(jù)。
你能用 setXXX()方法和 updateXXX()方法將 Java 類型轉(zhuǎn)換為特定的 JDBC 數(shù)據(jù)類型。你能用 setObject()方法和 updateObject()方法將絕大部分的 Java 類型映射到 JDBC 數(shù)據(jù)類型。
ResultSet 對象為任一數(shù)據(jù)類型提供相應的 getXXX()方法,該方法可以獲取任一數(shù)據(jù)類型的列值。上述任一方法的使用需要列名或它的順序位置。
SQL | JDBC/Java | setXXX | getXXX |
---|---|---|---|
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 數(shù)據(jù)類型和 SQL TIMESTAMP 數(shù)據(jù)類型。
以下示例顯示了日期和時間類如何轉(zhuǎn)換成標準的 Java 日期和時間值,并匹配成 SQL 數(shù)據(jù)類型所要求的格式。
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
現(xiàn)在,讓我們用下面的命令編譯上面的代碼-
C:\>javac JDBCExample.java
C:\>
當你運行 JDBCExample 時,它將展示下面的結(jié)果-
C:\>java SqlDateTime
The Java Date is:Tue Aug 18 13:46:02 GMT+04:00 2009
The SQL DATE is: 2009-08-18
The SQL TIME is: 13:46:02
The SQL TIMESTAMP is: 2009-08-18 13:46:02.828
C:\>
SQL 使用 NULL 值和 Java 使用 null 是不同的概念。那么,你可以使用三種策略來處理 Java 中的 SQL 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;
}