JDBC的数据类型
以下内容引用自http://wiki.jikexueyuan.com/project/jdbc/data-types.html:
JDBC驱动程序在将Java数据类型发送到数据库之前,会将其转换为相应的JDBC类型。对于大多数数据类型都采用了默认的映射关系。例如,一个Java int数据类型转换为SQL INTEGER。通过默认的映射关系来提供驱动程序之间的一致性。
当调用PreparedStatement中的setXXX()方法或CallableStatement对象或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
这将产生如下所示结果:

二、处理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
JDBC的数据类型的更多相关文章
- 通过 JDBC 驱动程序使用大容量复制
		
Microsoft SQL Server 包含一个名为 bcp 的受欢迎的命令行实用工具,以便将较大文件快速大容量复制到 SQL Server 数据库的表或视图中. SQLServerBulkCopy ...
 - 传智博客(JavaWeb方面的所有知识)听课记录(经典)
		
一. JavaWeb基础 第一天: 1.Eclipse详解: (1).Bad versionnumber in .class file:编译器版本和运行(JRE)版本不符合.高的JRE版本 ...
 - SQL盲注修订建议
		
一般有多种减轻威胁的技巧: [1] 策略:库或框架 使用不允许此弱点出现的经过审核的库或框架,或提供更容易避免此弱点的构造. [2] 策略:参数化 如果可用,使用自动实施数据和代码之间的分离的结构化机 ...
 - mybatis入门系列二之输入与输出参数
		
mybatis入门系列二之详解输入与输出参数 基础知识 mybatis规定mapp.xml中每一个SQL语句形式上只能有一个@parameterType和一个@resultType 1. 返回 ...
 - Java调用SQL Server的存储过程详解
		
转载自Microsoft的官方文档 http://msdn2.microsoft.com/zh-cn/library/ms378995.aspx收录于 www.enjoyjava.net/f25 本文 ...
 - (转)Java调用SQL Server的存储过程详解
		
本文转载自:http://dev.yesky.com/128/8088128.shtml 1使用不带参数的存储过程 使用 JDBC 驱动程序调用不带参数的存储过程时,必须使用 call SQL 转义序 ...
 - Java调用SQL Server的存储过程详解(转)
		
1使用不带参数的存储过程 使用 JDBC 驱动程序调用不带参数的存储过程时,必须使用 call SQL 转义序列.不带参数的 call 转义序列的语法如下所示: 以下是引用片段:{call proce ...
 - mybatis的XML配置文件中,typeHandler、jdbcType、javaType的使用
		
1.前言 typeHandler.jdbcType.javaType都是用来处理java数据类型和jdbc数据库数据类型的转换问题,但在xml的不同位置使用需要注意引号使用问题. 2.在xml的不同位 ...
 - JDBC数据类型
		
JDBC数据类型 JDBC驱动程序Java数据类型转换到适当的JDBC类型然后再将它发送到数据库.它使用默认的大多数数据类型映射.例如,一个Java int转换成一个SQL INTEGER.创建默认映 ...
 
随机推荐
- 用css制作圆环图表 (vue,sass)
			
效果图: 思路 :在一个容器里再放两个矩形,每个矩形都占一半,给这两个矩形都设置溢出隐藏,当去旋转矩形里面的圆形的时候,溢出部分就被隐藏掉了,这样就可以达到想要的效果. 代码-html: <di ...
 - iOS Programming  UIWebView  2
			
iOS Programming UIWebView 1 Instances of UIWebView render web content. UIWebView可以显示web content. In ...
 - 【转】Android Activity/Fragment Lifecycle
			
原文来自:http://stormzhang.github.io/android/2014/08/08/activity-fragment-lifecycle/ 说Activity和Fragment是 ...
 - reStructuredText学习
			
reStructuredText学习====================2015年4月1日 学习的最好方法就是尽快动手开始.不断迭代,不断完善. reStructuredText学习v0.1版本. ...
 - 关于mapState和mapMutations和mapGetters 和mapActions辅助函数的用法及作用(一)-----mapState
			
一.通过mapState函数的对象参数来赋值: <p>{{ count }}</p> <p>{{ count1 }}</p> <p>{{ c ...
 - 第三方知乎专栏应用Android源码
			
这是一个国内开发者白瓦力贡献的一个简约的第三方知乎客户端,也许完整度不太高,但感觉还是相当不错的,其实我也是一个知乎迷,尽管平时围观的比较多. 我相信很多搞安卓开发的童鞋也去过知乎解惑吧.引用作者的描 ...
 - OpenFlow_tutorial_4_Create_a_Learning_Switch
			
一.环境搭建: 教程里提供的VM image需要梯子才能下载,好不容易下载下来,发现镜像很难用,各种安装问题,搞了好几天也解决不了.后来就自己搭环境,主要是安装Ryu. 1.首先下载相应的python ...
 - Discuz3.1登录QQ互联显示redirect uri is illegal(100010)的解决
			
QQ互联最近也是BUG不断,引起了很多用户的不满,从早前关闭群组功能,到发布2.0接口标准,引发系列站长用户的连锁反应.而Discuz从X3开始,为了应对QQ互联的2.0接口标准,采用了云平台来整合Q ...
 - 【VBA研究】如何用Base64 编解码方法实现简单的加解密
			
Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编码,将数据变成字符串实现文本传输.由于编码简单,所以很容易实现,代码也是现成的.利用这个编码规则可以实现简单的加解密.编解码方 ...
 - struts2 前端显示错误信息
			
当我们显示错误信息的时候,会发现错误信息会以列表的形式显示,这样就不美观了,达不到我们想要的标准.所以我们可以用另外的方式输出错误信息. 例如我现在增加了两个错误信息: this.addFieldEr ...