JDBC 數(shù)據(jù)類(lèi)型

JDBC驅(qū)動(dòng)程序在將Java數(shù)據(jù)類(lèi)型發(fā)送到數(shù)據(jù)庫(kù)之前,先將其轉(zhuǎn)換為適當(dāng)?shù)腏DBC類(lèi)型。它對(duì)大多數(shù)數(shù)據(jù)類(lèi)型使用默認(rèn)映射。例如,將Java int轉(zhuǎn)換為SQL INTEGER。創(chuàng)建了默認(rèn)映射以提供驅(qū)動(dòng)程序之間的一致性。

當(dāng)調(diào)用 PreparedStatement 或 CallableStatement 對(duì)象的 setXXX ()方法或 ResultSet.updateXXX ()方法時(shí),下表總結(jié)了 Java 數(shù)據(jù)類(lèi)型轉(zhuǎn)換為的默認(rèn) JDBC 數(shù)據(jù)類(lèi)型。

的SQLJDBC / JavasetXXX更新XXX
VARCHARjava.lang.StringsetStringupdateString
CHARjava.lang.StringsetStringupdateString
LONGVARCHARjava.lang.StringsetStringupdateString
BITbooleansetBooleanupdateBoolean
NUMERICjava.math.BigDecimalsetBigDecimalupdateBigDecimal
TINYINTbytesetByteupdateByte
SMALLINTshortsetShortupdateShort
INTEGERintsetIntupdateInt
BIGINTlongsetLongupdateLong
REALfloatsetFloatupdateFloat
FLOATfloatsetFloatupdateFloat
DOUBLEdoublesetDoubleupdateDouble
VARBINARYbyte[ ]setBytesupdateBytes
BINARYbyte[ ]setBytesupdateBytes
DATEjava.sql.DatesetDateupdateDate
TIMEjava.sql.TimesetTimeupdateTime
TIMESTAMPjava.sql.TimestampsetTimestampupdateTimestamp
CLOBjava.sql.ClobsetClobupdateClob
BLOBjava.sql.BlobsetBlobupdateBlob
ARRAYjava.sql.ArraysetARRAYupdateARRAY
REFjava.sql.RefSetRefupdateRef
STRUCTjava.sql.StructSetStructupdateStruct

JDBC 3.0增強(qiáng)了對(duì)BLOB,CLOB,ARRAY和REF數(shù)據(jù)類(lèi)型的支持。ResultSet對(duì)象現(xiàn)在有updateBLOB(),updateCLOB(),updateArray()和updateRef()方法,使您可以直接在服務(wù)器上操作的相應(yīng)數(shù)據(jù)。

使用setXXX()和updateXXX()方法,可以將特定的Java類(lèi)型轉(zhuǎn)換為特定的JDBC數(shù)據(jù)類(lèi)型。使用setObject()和updateObject()方法,可以將幾乎所有Java類(lèi)型映射到JDBC數(shù)據(jù)類(lèi)型。

ResultSet 對(duì)象為每種數(shù)據(jù)類(lèi)型提供了相應(yīng)的 getXXX ()方法來(lái)檢索列值。每個(gè)方法都可以與列名或其序號(hào)位置一起使用。

的SQLJDBC / JavasetXXXgetXXX
VARCHARjava.lang.StringsetStringgetString
CHARjava.lang.StringsetStringgetString
LONGVARCHARjava.lang.StringsetStringgetString
BITbooleansetBooleangetBoolean
NUMERICjava.math.BigDecimalsetBigDecimalgetBigDecimal
TINYINTbytesetBytegetByte
SMALLINTshortsetShortgetShort
INTEGERintsetIntgetInt
BIGINTlongsetLonggetLong
REALfloatsetFloatgetFloat
FLOATfloatsetFloatgetFloat
DOUBLEdoublesetDoublegetDouble
VARBINARYbyte[ ]setBytesgetBytes
BINARYbyte[ ]setBytesgetBytes
DATEjava.sql.DatesetDategetDate
TIMEjava.sql.TimesetTimegetTime
TIMESTAMPjava.sql.TimestampsetTimestampgetTimestamp
CLOBjava.sql.ClobsetClobgetClob
BLOBjava.sql.BlobsetBlobgetBlob
ARRAYjava.sql.ArraysetARRAYgetARRAY
REFjava.sql.RefSetRefgetRef
STRUCTjava.sql.StructSetStructgetStruct

日期和時(shí)間數(shù)據(jù)類(lèi)型

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

下面的示例顯示Date和Time類(lèi)如何格式化標(biāo)準(zhǔn)Java日期和時(shí)間值以匹配SQL數(shù)據(jù)類(lèi)型要求。

import java.sql.Date;
import java.sql.Time;
import java.sql.Timestamp;
import java.util.*;

public class SqlDateTime {
   public static void main(String[] args) {
      //獲取標(biāo)準(zhǔn)日期和時(shí)間
      java.util.Date javaDate = new java.util.Date();
      long javaTime = javaDate.getTime();
      System.out.println("The Java Date is:" + 
             javaDate.toString());

      //獲取并顯示SQL DATE
      java.sql.Date sqlDate = new java.sql.Date(javaTime);
      System.out.println("The SQL DATE is: " + 
             sqlDate.toString());

      //獲取并顯示SQL TIME
      java.sql.Time sqlTime = new java.sql.Time(javaTime);
      System.out.println("The SQL TIME is: " + 
             sqlTime.toString());
      //獲取并顯示SQL TIMESTAMP
      java.sql.Timestamp sqlTimestamp =
      new java.sql.Timestamp(javaTime);
      System.out.println("The SQL TIMESTAMP is: " + 
             sqlTimestamp.toString());
     }//結(jié)束main
}//結(jié)束SqlDateTime

現(xiàn)在讓我們編譯上面的示例,如下所示:

C:\>javac SqlDateTime.java
C:\>

運(yùn)行時(shí)JDBCExample,它將產(chǎn)生以下結(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對(duì)NULL值的使用和Java對(duì)null的使用是不同的概念。因此,要在Java中處理SQL NULL值,可以使用三種策略-

  • 避免使用getXXX( )返回原始數(shù)據(jù)類(lèi)型的方法。

  • 對(duì)原始數(shù)據(jù)類(lèi)型使用包裝類(lèi),并使用 ResultSet 對(duì)象的 wasNull ()方法來(lái)測(cè)試接收 getXXX ()方法返回的值的包裝類(lèi)變量是否應(yīng)該設(shè)置為 null。

  • 使用原始數(shù)據(jù)類(lèi)型和ResultSet對(duì)象的wasNull( )方法測(cè)試接收getXXX( )方法返回的值的原始變量是否應(yīng)設(shè)置為您選擇的代表NULL的可接受值。

這是處理NULL值的一個(gè)示例-

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;
}
丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清