JDBC數據類型
JDBC驅動程序將其發送到數據庫之前的Java數據類型轉換為相應的JDBC類型。它采用了默認的映射對於大多數數據類型。例如,一個Java整型轉換為SQL INTEGER。創建默認映射提供的驅動程序之間的一致性。
下表總結了Java數據類型轉換為當調用PreparedStatement中的setXXX()方法或CallableStatement對象或ResultSet.updateXXX()方法的默認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 |
JDBC3.0增強了對BLOB,CLOB,ARRAY和REF數據類型的支持。 ResultSet 對象現在有UPDATEBLOB(),updateCLOB(),updateArray(),和updateRef()方法,可以直接操作服務器上的相應數據。
setXXX()和updateXXX()方法能夠將特定Java類型轉換為特定的JDBC數據類型。該方法setObject()和updateObject(),能夠將幾乎任何Java類型映射到JDBC數據類型。
ResultSet對象為每個數據類型來檢索列值對應的getXXX()方法。每個方法可用於與列名或由它的序數位置。
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和SQL TIMESTAMP數據類型。
下麵的例子顯示了日期和時間格式類標準的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
現在讓我們來編譯上麵的例子如下:
C:>javac SqlDateTime.java C:>
當運行JDBCExample,它會產生以下結果:
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:>
處理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; }