鍍金池/ 教程/ Java/ JDBC數(shù)據(jù)類型
JDBC Like子句實例
JDBC異常
JDBC排序數(shù)據(jù)實例
JDBC事務保存點(setSavepoint, releaseSavepoint )實例
JDBC結果集
JDBC Statement對象執(zhí)行批量處理實例
JDBC事務
JDBC SQL語法
JDBC快速入門教程
JDBC創(chuàng)建數(shù)據(jù)庫實例
JDBC流ASCII和二進制數(shù)據(jù)
JDBC刪除表實例
JDBC Statements, PreparedStatement和CallableStatement語句
JDBC WHERE子句條件實例
JDBC插入數(shù)據(jù)實例
JDBC驅動程序類型
JDBC環(huán)境配置
JDBC數(shù)據(jù)庫連接
JDBC刪除數(shù)據(jù)實例
JDBC PrepareStatement對象執(zhí)行批量處理實例
JDBC刪除數(shù)據(jù)庫實例
JDBC事務提交/回滾實例
JDBC更新數(shù)據(jù)實例
JDBC存儲過程調用
JDBC教程
JDBC批量處理
JDBC創(chuàng)建表實例
JDBC數(shù)據(jù)類型
JDBC是什么?
JDBC簡單示例代碼
JDBC選擇數(shù)據(jù)庫實例
JDBC查詢數(shù)據(jù)實例

JDBC數(shù)據(jù)類型

JDBC驅動程序將Java數(shù)據(jù)類型轉換為適當?shù)腏DBC類型,然后將其發(fā)送到數(shù)據(jù)庫。 它為大多數(shù)數(shù)據(jù)類型提供并使用默認映射。 例如,Java int類型會被轉換為SQL INTEGER。 創(chuàng)建默認映射以提供到驅動程序時保持一致性。

下表總結了當調用PreparedStatementCallableStatement對象或ResultSet.updateXXX()方法的setXXX()方法時,將Java數(shù)據(jù)類型轉換為的默認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增強了對BLOBCLOB,ARRAYREF數(shù)據(jù)類型的支持。 ResultSet對象現(xiàn)在具有updateBLOB(),updateCLOB()updateArray()updateRef()方法,使您能夠直接操作數(shù)據(jù)庫服務器上的相應數(shù)據(jù)。

setXXX()updateXXX()方法可以將特定的Java類型轉換為特定的JDBC數(shù)據(jù)類型。 方法setObject()updateObject()可以將幾乎任何Java類型映射到JDBC數(shù)據(jù)類型。

ResultSet對象為每個數(shù)據(jù)類型提供相應的getXXX()方法來檢索列值。每個方法都可以使用列名或其序數(shù)位置來檢索列值。

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

日期和時間數(shù)據(jù)類型

java.sql.Date類映射到SQL DATE類型,java.sql.Timejava.sql.Timestamp類分別映射到SQL TIME和SQL TIMESTAMP數(shù)據(jù)類型。

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

編譯并執(zhí)行上面代碼,得到以下結果 -

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值,可以使用三種策略 -

  • 避免使用返回原始數(shù)據(jù)類型的getXXX()方法。
  • 對原始數(shù)據(jù)類型使用包裝類,并使用ResultSet對象的wasNull()方法來測試接收getXXX()方法的返回值的包裝器類變量是否應設置為null。
  • 使用原始數(shù)據(jù)類型和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;
}