- JDBC教程
- JDBC - 主页
- JDBC - 简介
- JDBC - SQL 语法
- JDBC - 环境
- JDBC - 示例代码
- JDBC - 驱动程序类型
- JDBC - 连接
- JDBC - 语句
- JDBC - 结果集
- JDBC - 数据类型
- JDBC - 事务
- JDBC - 异常
- JDBC - 批处理
- JDBC - 存储过程
- JDBC - 流数据
- JDBC 示例
- JDBC - 创建数据库
- JDBC - 选择数据库
- JDBC - 删除数据库
- JDBC - 创建表
- JDBC - 删除表
- JDBC - 插入记录
- JDBC - 选择记录
- JDBC - 更新记录
- JDBC - 删除记录
- JDBC - WHERE 子句
- JDBC - Like 子句
- JDBC - 数据排序
- JDBC 有用资源
- JDBC - 问题与解答
- JDBC - 快速指南
- JDBC - 有用的资源
- JDBC - 讨论
- 有用 - Java 教程
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; }