咱們知道Java的數據類型和數據庫中的類型並非一一對應的,咱們在使用JDBC在與數據庫進行交互的時候,好比咱們向數據庫中插入一條數據,或者從數據庫中查詢一個數據,爲何咱們可以正常的讀取呢?那是由於存在着一個對應關係或者是一個映射關係。java
經過這個JDBC驅動程序,咱們就可以兩個數據類型的相互轉化了。sql
下表總結了當調用PreparedStatement
或者CallableStatement
對象或者ResultSet.updateXXX()
方法和setXXX()
方法時,將Java數據類型轉換爲默認的jDBC數據類型/Java類型。數據庫
setXXX
和updateXXX()
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>
對於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值。
第一種方法
判斷經過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()
檢測。
例子看以前的。
首先往數據庫裏傳入值會有兩種方式,一種是使用結果集的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值