【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值

相關文章
相關標籤/搜索