【Java学习】JDBC数据类型

概述

咱们知道Java的数据类型和数据库中的类型并非一一对应的,咱们在使用JDBC在与数据库进行交互的时候,好比咱们向数据库中插入一条数据,或者从数据库中查询一个数据,为何咱们可以正常的读取呢?那是由于存在着一个对应关系或者是一个映射关系。java

clipboard.png

经过这个JDBC驱动程序,咱们就可以两个数据类型的相互转化了。sql

映射表

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

clipboard.png

setXXXupdateXXX()

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

setObject()updateObject()能够将几乎任何java数据类型映射到JDBC数据类型。spa

时间与日期类型

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

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

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:\worksp\jdbc>javac SqlDateTime.java

F:\worksp\jdbc>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:\worksp\jdbc>

处理NULL值

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

因此要在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 ("\n MGRNO isnull \n");
    
}

能够看出获取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值

相关文章
相关标签/搜索