JDBC的數據類型

如下內容引用自http://wiki.jikexueyuan.com/project/jdbc/data-types.htmlhtml

JDBC驅動程序在將Java數據類型發送到數據庫以前,會將其轉換爲相應的JDBC類型。對於大多數數據類型都採用了默認的映射關係。例如,一個Java int數據類型轉換爲SQL INTEGER。經過默認的映射關係來提供驅動程序之間的一致性。java

當調用PreparedStatement中的setXXX()方法或CallableStatement對象或ResultSet.updateXXX()方法時,Java數據類型會轉換爲默認的JDBC數據類型,以下表概述。git

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數據類型的支持。ResultSet對象如今有UpdateBlob,updateCLOB(),updateArray()和updateRef()方法,經過這些方法能夠直接操做服務器上的相應數據。github

能用setXXX()方法和updateXXX()方法將Java類型轉換爲特定的JDBC數據類型。能用setObject()方法和updateObject()方法將絕大部分的Java類型映射到JDBC數據類型。sql

ResultSet對象爲任一數據類型提供相應的getXXX()方法,該方法能夠獲取任一數據類型的列值。上述任一方法的使用須要列名或它的順序位置。數據庫

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

1、日期和時間數據類型服務器

java.sql.Date類映射SQL DATE類型,java.sql.Time類和java.sql.Timestamp類也分別映射SQL TIME數據類型和SQL TIMESTAMP數據類型。測試

如下示例顯示了日期和時間類如何轉換成標準的Java日期和時間值,並匹配成SQL數據類型所要求的格式。spa

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

這將產生以下所示結果:code

2、處理NULL值

SQL使用NULL值和Java使用null是不一樣的概念。那麼,能夠使用三種策略來處理Java中的SQL NULL值:

  • 避免使用返回原始數據類型的getXXX()方法。
  • 使用包裝類的基本數據類型,並使用ResultSet對象的wasNull()方法來測試收到getXXX()方法返回的值是否爲null,若是是null,該包裝類變量則被設置爲null。
  • 使用原始數據類型和ResultSet對象的wasNull()方法來測試經過getXXX()方法返回的值,若是是null,則原始變量應設置爲可接受的值來表明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;
}

 

測試工程:https://github.com/easonjim/5_java_example/tree/master/jdbcbasics/test4

相關文章
相關標籤/搜索