鍍金池/ 教程/ Java/ 數(shù)據(jù)類型
流數(shù)據(jù)
創(chuàng)建表實例
驅(qū)動類型
簡介
數(shù)據(jù)類型
SQL語法
選擇數(shù)據(jù)庫實例
WHERE 子句實例
批處理
連接數(shù)據(jù)庫
創(chuàng)建數(shù)據(jù)庫實例
排序?qū)嵗?/span>
查詢記錄實例
刪除表實例
環(huán)境
刪除數(shù)據(jù)庫實例
存儲過程
異常
示例代碼
刪除記錄實例
更新記錄實例
結(jié)果集
事務(wù)
Statement 對象
插入記錄實例
LIKE 子句實例

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

JDBC 驅(qū)動程序在將 Java 數(shù)據(jù)類型發(fā)送到數(shù)據(jù)庫之前,會將其轉(zhuǎn)換為相應(yīng)的 JDBC 類型。對于大多數(shù)數(shù)據(jù)類型都采用了默認(rèn)的映射關(guān)系。例如,一個 Java int 數(shù)據(jù)類型轉(zhuǎn)換為 SQL INTEGER。通過默認(rèn)的映射關(guān)系來提供驅(qū)動程序之間的一致性。

當(dāng)你調(diào)用 PreparedStatement 中的 setXXX()方法或 CallableStatement 對象或 ResultSet.updateXXX()方法時, Java 數(shù)據(jù)類型會轉(zhuǎn)換為默認(rè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()方法,通過這些方法你可以直接操作服務(wù)器上的相應(yīng)數(shù)據(jù)。

你能用 setXXX()方法和 updateXXX()方法將 Java 類型轉(zhuǎn)換為特定的 JDBC 數(shù)據(jù)類型。你能用 setObject()方法和 updateObject()方法將絕大部分的 Java 類型映射到 JDBC 數(shù)據(jù)類型。

ResultSet 對象為任一數(shù)據(jù)類型提供相應(yīng)的 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

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

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

以下示例顯示了日期和時間類如何轉(zhuǎn)換成標(biāo)準(zhǔ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:\>

當(dāng)你運行 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:\>

處理 NULL 值

SQL 使用 NULL 值和 Java 使用 null 是不同的概念。那么,你可以使用三種策略來處理 Java 中的 SQL NULL 值-

  • 避免使用返回原始數(shù)據(jù)類型的 getXXX()方法。
  • 使用包裝類的基本數(shù)據(jù)類型,并使用 ResultSet 對象的 wasNull()方法來測試收到 getXXX()方法返回的值是否為 null,如果是 null,該包裝類變量則被設(shè)置為 null。
  • 使用原始數(shù)據(jù)類型和 ResultSet 對象的 wasNull()方法來測試通過 getXXX()方法返回的值,如果是 null,則原始變量應(yīng)設(shè)置為可接受的值來代表 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;
}
上一篇:WHERE 子句實例下一篇:更新記錄實例