资讯专栏INFORMATION COLUMN

【Java学习】JDBC数据类型

Vixb / 1861人阅读

摘要:通过这个驱动程序,我们就能够两个数据类型的相互转化了。和和方法可以将特定的类型转换为特定的数据类型。和可以将几乎任何数据类型映射到数据类型。时间与日期类型类映射到类型,和类分别映射到和数据类型。

概述

我们知道Java的数据类型和数据库中的类型并不是一一对应的,我们在使用JDBC在与数据库进行交互的时候,比如我们向数据库中插入一条数据,或者从数据库中查询一个数据,为什么我们能够正常的读取呢?那是因为存在着一个对应关系或者是一个映射关系。

通过这个JDBC驱动程序,我们就能够两个数据类型的相互转化了。

映射表

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

setXXXupdateXXX()

setXXX()updateXXX()方法可以将特定的Java类型转换为特定的JDBC数据类型。在结果集ResultSet已经总结过。

setObject()updateObject()可以将几乎任何java数据类型映射到JDBC数据类型。

时间与日期类型

java.sql.Date类映射到SQLDATE类型,java.sql.Time和java.sql.Timestamp类分别映射到SQLTIME和SQLTIMESTAMP数据类型。

下面实例显示了如何格式化为标准java日期和时间

import java.sql.Date;
import java.sql.Time;
import java.sql.Timestamp;
import java.util.*;

public class sqlDateTime{
    public static void main(String[] args){
        //得到标准的日期和时间
        java.util.Date javaDate = new java.util.Date();
        long javaTime = javaDate.getTime();
        System.out.println("The java Date is:"+javaDate.toString());
        
        //得到并显示SQL日期
        java.sql.Date sqlDate = new java.sql.Date(javaTime);
        System.out.println("The SQL DATE is:" + sqlDate.toString());
        
        //得到并显示Sql时间
        java.sql.Time sqlTime = new java.sql.Time(javaTime);
        System.out.println("The SQL TIME is:" + sqlTime.toString());
        
        //得到并且显示SQL时间戳
        java.sql.Timestamp sqlTimestamp = new java.sql.Timestamp(javaTime);
        System.out.println("The SQL TIMESTAMP is :" + sqlTimestamp.toString());
        
    
    
    }

}

结果:

F:workspjdbc>javac SqlDateTime.java

F:workspjdbc>java SqlDateTime
The Java Date is:Wed May 31 23:54:57 CST 2017
The SQL DATE is: 2017-05-31
The SQL TIME is: 23:54:57
The SQL TIMESTAMP is: 2017-05-31 23:54:57.937

F:workspjdbc>
处理NULL值

对于Sql和hava而言,两个null值的含义不一样。
SQL中的NULL值是遗漏的未知数据
而Java中代表着是空值,是一种特殊的值,它可以是任何数据类型的默认值。

所以要在Java中处理SQL的NULL该如何做呢?
先看一下下面的实例:

Statement stmt = conn.createStatement();
String sql = "SELECT id,first,last,age FROM Employees";
ResultSet rs = stmt.excuteQuery(sql);

int id = rs.getInt(1);
if(rs.wasNull()){
    id = 0;
}

由上面可以看出,直接使用get()方法,可能获取到NULL值,这个时候,resultSet对象有一个wasNull()方法,来测试是不是NULL值。

下面来细细的总结一下如何详细的处理NULL值。

从数据库中读取到的NULL
第一种方法

判断通过get方法获取到的值可以使用==比较符。看下面的例子

String mgrno = rs.getString(1);  
if (mgrno== null)  { 
    System.out.println ("
 MGRNO isnull 
");
    
}  

可以看出获取String类型,如果是NULL的话,会直接转换为null值,但是这并不是总是奏效,因为使用getInt()getShort()接收值时,若值为SQL NULL,会自动转换成0

第二种方法

前面已经见识到了,Resultset对象提供了一个wasNull()检测。
例子看之前的。

向数据库中传入NULL值

首先往数据库里传入值会有两种方式,一种是使用结果集的UpdateXXX()方法,另一种是使用结果集的Set方法,也可以通过Statement,执行UPDATE SQL语句,但大体来说都一样。

第一种方法
同样的,对于String等类型而言是可以通过null直接赋值,如setXXX(1,null)。
但是同理,如果对于setInt(1,null)或是setFloat(1,null)、setShort(1,null)时都无法通过编译

也就是说只有当类型为java对象时可以执行成功.

第二种方法

受第一种的启发,我们可以在创建Statement SQL语句时,就可以直接设置成NULL啊,确实可以,但是这种方式不够灵活,万一我设置NULL值呢?下次还得写一遍。

第三种方法
同样的PreparedStatement对象同样提供了一个setNull()方法,来专门赋NULL值。

例子:

PreparedStatement pstmt = null;  

sql = "UPDATE EMP SET EDLEVEL = ? "  + " WHERE EMPNO = "0000110" ";  
pstmt = con.prepareStatement(sql);  

if ( some condition )  {
    pstmt.setNull (1,java.sql.Type.SMALLINT); 
}  

else  { 
    pstmt.setShort( 1, 16 ); 

}  
updateCount = pstmt.executeUpdate();  

其中第二个参数是参数类型,要使用SQL中的类型。

参考资料

易百教程
JDBC处理NULL值

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/76350.html

相关文章

  • Java学习JDBC学习(了解CLass等)

    摘要:同时也有一些儿高级的处理,比如批处理更新事务隔离和可滚动结果集等。连接对象表示通信上下文,即,与数据库中的所有的通信是通过此唯一的连接对象。因为是针对类的关系而言,所以一个对象对应多个类的实例化。返回表示查询返回表示其它操作。 JDBC是什么? JDBC是一个Java API,用中文可以通俗的解释为,使用Java语言访问访问数据库的一套接口集合。这是调用者(程序员)和实行者(数据库厂商...

    cjie 评论0 收藏0
  • Mybatis学习笔记

    摘要:学习笔记有官方的中文开发文档并且针对使用者比较友好是一款优秀的持久层框架,它支持定制化存储过程以及高级映射。它只和配置有关,存在的意义仅在于用来减少类完全限定名的冗余,为了简化中的书写。 Mybatis学习笔记 mybatis有官方的中文开发文档并且针对使用者比较友好:http://www.mybatis.org/mybatis-3/zh/ MyBatis 是一款优秀的持久层框架,它支...

    jsyzchen 评论0 收藏0
  • 几个数据持久化框架Hibernate、JPA、Mybatis、JOOQ和JDBC Template的

    摘要:不管是还是,表之间的连接查询,被映射为实体类之间的关联关系,这样,如果两个实体类之间没有实现关联关系,你就不能把两个实体或者表起来查询。 因为项目需要选择数据持久化框架,看了一下主要几个流行的和不流行的框架,对于复杂业务系统,最终的结论是,JOOQ是总体上最好的,可惜不是完全免费,最终选择JDBC Template。 Hibernate和Mybatis是使用最多的两个主流框架,而JOO...

    xietao3 评论0 收藏0
  • [JAVA][学习·练手·挖坑] 做个数据库帮助库雏形 · 二

    摘要:事实上,实现了接口,而也实现了接口。还记得之前说的,使用之后,其返回的实际上是一个装饰器吗。所以修改如下是默认全局工厂名称,请使用别的名称工厂已经配置完成,请不要重复配置。 这是做个数据库帮助库雏形 的当晚的再一次尝试 ORZ 在意识到原来的 ConnectionProvider 提供的只是一个普通(实现了AutoCloseable接口)的 Connection,这在 Reposito...

    Eric 评论0 收藏0
  • JDBC【介绍JDBC、使用JDBC连接数据库、简单的工具类】

    摘要:常用的方法创建向数据库发送的对象。创建执行存储过程的对象设置事务自动提交提交事务回滚事务对象对象用于向数据库发送语句,对数据库的增删改查都可以通过此对象发送语句完成。 1.什么是JDBC JDBC全称为:Java Data Base Connectivity,它是可以执行SQL语句的Java API 2.为什么我们要用JDBC 市面上有非常多的数据库,本来我们是需要根据不同的数据库学...

    MSchumi 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<