JDBC数据类型

JDBC驱动程序将其发送到数据库之前的Java数据类型转换为相应的JDBC类型。它采用了默认的映射对于大多数数据类型。例如,一个Java整型转换为SQL INTEGER。创建默认映射提供的驱动程序之间的一致性。

下表总结了Java数据类型转换为当调用PreparedStatement中的setXXX()方法或CallableStatement对象或ResultSet.updateXXX()方法的默认JDBC数据类型。

SQLJDBC/JavasetXXXupdateXXX
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

JDBC3.0增强了对BLOB,CLOB,ARRAY和REF数据类型的支持。 ResultSet 对象现在有UPDATEBLOB(),updateCLOB(),updateArray(),和updateRef()方法,可以直接操作服务器上的相应数据。

setXXX()和updateXXX()方法能够将特定Java类型转换为特定的JDBC数据类型。该方法setObject()和updateObject(),能够将几乎任何Java类型映射到JDBC数据类型。

ResultSet对象为每个数据类型来检索列值对应的getXXX()方法。每个方法可用于与列名或由它的序数位置。

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

 

日期和时间数据类型:

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;
}
知识兔
计算机