JDBC - 数据类型

  • 简述

    JDBC 驱动程序将 Java 数据类型转换为适当的 JDBC 类型,然后再将其发送到数据库。它对大多数数据类型使用默认映射。例如,Java int 被转换为 SQL INTEGER。创建默认映射是为了提供驱动程序之间的一致性。
    下表总结了在调用 PreparedStatement 或 CallableStatement 对象的 setXXX() 方法或 ResultSet.updateXXX() 方法时,Java 数据类型转换为的默认 JDBC 数据类型。
    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() 方法,使您能够直接操作服务器上的相应数据。
    setXXX() 和 updateXXX() 方法使您能够将特定的 Java 类型转换为特定的 JDBC 数据类型。方法 setObject() 和 updateObject() 使您能够将几乎任何 Java 类型映射到 JDBC 数据类型。
    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
  • 日期和时间数据类型

    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;
    
    }