位置:首頁 > Java技術 > JDBC教學 > JDBC數據類型

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