JDBC - 数据类型


JDBC 驱动程序将 Java 数据类型转换为适当的 JDBC 类型,然后再将其发送到数据库。它对大多数数据类型使用默认映射。例如,Java int 转换为 SQL INTEGER。创建默认映射是为了提供驱动程序之间的一致性。

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

SQL JDBC/Java 设置XXX 更新XXX
VARCHAR java.lang.String 设置字符串 更新字符串
字符 java.lang.String 设置字符串 更新字符串
长VARCHAR java.lang.String 设置字符串 更新字符串
少量 布尔值 设置布尔值 更新布尔值
数字 java.math.BigDecimal 设置大十进制 更新大十进制
天音 字节 设置字节 更新字节
小智 短的 设置短 更新短
整数 整数 设置整数 更新整数
BIGINT 长的 设定长 更新长
真实的 漂浮 设置浮动 更新浮动
漂浮 漂浮 设置浮动 更新浮动
双倍的 双倍的 设置双精度 更新双倍
二进制 字节[ ] 设置字节数 更新字节数
二进制 字节[ ] 设置字节数 更新字节数
日期 java.sql.日期 设置日期 更新日期
时间 java.sql.时间 设置时间 更新时间
时间戳 java.sql.时间戳 设置时间戳 更新时间戳
CLOB java.sql.Clob 设置Clob 更新Clob
BLOB java.sql.Blob 设置Blob 更新Blob
大批 java.sql.Array 设置数组 更新数组
参考文献 java.sql.Ref 设置引用 更新参考
结构体 java.sql.Struct 设置结构体 更新结构体

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 设置XXX 获取XXX
VARCHAR java.lang.String 设置字符串 获取字符串
字符 java.lang.String 设置字符串 获取字符串
长VARCHAR java.lang.String 设置字符串 获取字符串
少量 布尔值 设置布尔值 获取布尔值
数字 java.math.BigDecimal 设置大十进制 获取大十进制
天音 字节 设置字节 获取字节
小智 短的 设置短 做空
整数 整数 设置整数 获取整数
BIGINT 长的 设定长
真实的 漂浮 设置浮动 获取浮动
漂浮 漂浮 设置浮动 获取浮动
双倍的 双倍的 设置双精度 获取双倍
二进制 字节[ ] 设置字节数 获取字节数
二进制 字节[ ] 设置字节数 获取字节数
日期 java.sql.日期 设置日期 获取日期
时间 java.sql.时间 设置时间 获取时间
时间戳 java.sql.时间戳 设置时间戳 获取时间戳
CLOB java.sql.Clob 设置Clob 获取Clob
BLOB java.sql.Blob 设置Blob 获取Blob
大批 java.sql.Array 设置数组 获取数组
参考文献 java.sql.Ref 设置引用 获取引用
结构体 java.sql.Struct 设置结构体 获取结构体

日期和时间数据类型

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