博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JDBC的数据类型
阅读量:7123 次
发布时间:2019-06-28

本文共 3913 字,大约阅读时间需要 13 分钟。

以下内容引用自:

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

 

测试工程:

==>如有问题,请联系我:easonjim#163.com,或者下方发表评论。<==

转载地址:http://cdsel.baihongyu.com/

你可能感兴趣的文章
Spring Boot快速开发REST服务最佳实践
查看>>
路由策略和策略路由 & route-map
查看>>
统计1:概述
查看>>
linux之sshfs
查看>>
[转][MVC4]ASP.NET MVC4+EF5(Lambda/Linq)读取数据
查看>>
登录rabbitmq报错User can only log in via localhost
查看>>
[Web 前端] 使用yarn代替npm作为node.js的模块管理器
查看>>
1A2B猜数字
查看>>
写好的电子邮件没了,还能找回吗?
查看>>
AQS共享锁应用之Semaphore原理
查看>>
GraphQL入门3(Mutation)
查看>>
添加评论功能
查看>>
iOS-个人开发者账号转公司开发者账号(邓白氏码申请教程)
查看>>
mosquitto简单应用
查看>>
深入FM和FFM原理与实践
查看>>
多线程-工作组模式
查看>>
微信JSAPI分享朋友圈调试经验:invalid signature签名错误排查
查看>>
react-native + teaset 实现 Tabbar
查看>>
空的OnGUI也会有gc
查看>>
JDK7与8内存参数解析与修改
查看>>