JDBC數據類型

JDBC驅動程序將Java數據類型轉換爲適當的JDBC類型,然後將其發送到數據庫。 它爲大多數數據類型提供並使用默認映射。 例如,Java int類型會被轉換爲SQL INTEGER。 創建默認映射以提供到驅動程序時保持一致性。

下表總結了當調用PreparedStatementCallableStatement對象或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增強了對BLOBCLOBARRAYREF數據類型的支持。 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.Timejava.sql.Timestamp類分別映射到SQL TIME和SQL TIMESTAMP數據類型。

以下示例顯示了DateTime類如何格式化爲標準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;
}