摘要:通過這個驅(qū)動程序,我們就能夠兩個數(shù)據(jù)類型的相互轉(zhuǎn)化了。和和方法可以將特定的類型轉(zhuǎn)換為特定的數(shù)據(jù)類型。和可以將幾乎任何數(shù)據(jù)類型映射到數(shù)據(jù)類型。時間與日期類型類映射到類型,和類分別映射到和數(shù)據(jù)類型。
概述
我們知道Java的數(shù)據(jù)類型和數(shù)據(jù)庫中的類型并不是一一對應(yīng)的,我們在使用JDBC在與數(shù)據(jù)庫進行交互的時候,比如我們向數(shù)據(jù)庫中插入一條數(shù)據(jù),或者從數(shù)據(jù)庫中查詢一個數(shù)據(jù),為什么我們能夠正常的讀取呢?那是因為存在著一個對應(yīng)關(guān)系或者是一個映射關(guān)系。
通過這個JDBC驅(qū)動程序,我們就能夠兩個數(shù)據(jù)類型的相互轉(zhuǎn)化了。
映射表下表總結(jié)了當(dāng)調(diào)用PreparedStatement或者CallableStatement對象或者ResultSet.updateXXX()方法和setXXX()方法時,將Java數(shù)據(jù)類型轉(zhuǎn)換為默認的jDBC數(shù)據(jù)類型/Java類型。
setXXX和updateXXX()setXXX()和updateXXX()方法可以將特定的Java類型轉(zhuǎn)換為特定的JDBC數(shù)據(jù)類型。在結(jié)果集ResultSet已經(jīng)總結(jié)過。
setObject()和updateObject()可以將幾乎任何java數(shù)據(jù)類型映射到JDBC數(shù)據(jù)類型。
時間與日期類型java.sql.Date類映射到SQLDATE類型,java.sql.Time和java.sql.Timestamp類分別映射到SQLTIME和SQLTIMESTAMP數(shù)據(jù)類型。
下面實例顯示了如何格式化為標(biāo)準(zhǔn)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){ //得到標(biāo)準(zhǔn)的日期和時間 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()); } }
結(jié)果:
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值是遺漏的未知數(shù)據(jù)
而Java中代表著是空值,是一種特殊的值,它可以是任何數(shù)據(jù)類型的默認值。
所以要在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值。
下面來細細的總結(jié)一下如何詳細的處理NULL值。
從數(shù)據(jù)庫中讀取到的NULL第一種方法
判斷通過get方法獲取到的值可以使用==比較符??聪旅娴睦?/p>
String mgrno = rs.getString(1); if (mgrno== null) { System.out.println (" MGRNO isnull "); }
可以看出獲取String類型,如果是NULL的話,會直接轉(zhuǎn)換為null值,但是這并不是總是奏效,因為使用getInt()和getShort()接收值時,若值為SQL NULL,會自動轉(zhuǎn)換成0。
第二種方法
前面已經(jīng)見識到了,Resultset對象提供了一個wasNull()檢測。
例子看之前的。
首先往數(shù)據(jù)庫里傳入值會有兩種方式,一種是使用結(jié)果集的UpdateXXX()方法,另一種是使用結(jié)果集的Set方法,也可以通過Statement,執(zhí)行UPDATE SQL語句,但大體來說都一樣。
第一種方法
同樣的,對于String等類型而言是可以通過null直接賦值,如setXXX(1,null)。
但是同理,如果對于setInt(1,null)或是setFloat(1,null)、setShort(1,null)時都無法通過編譯
也就是說只有當(dāng)類型為java對象時可以執(zhí)行成功.
第二種方法
受第一種的啟發(fā),我們可以在創(chuàng)建Statement SQL語句時,就可以直接設(shè)置成NULL啊,確實可以,但是這種方式不夠靈活,萬一我設(shè)置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();
其中第二個參數(shù)是參數(shù)類型,要使用SQL中的類型。
參考資料易百教程
JDBC處理NULL值
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/76350.html
摘要:同時也有一些兒高級的處理,比如批處理更新事務(wù)隔離和可滾動結(jié)果集等。連接對象表示通信上下文,即,與數(shù)據(jù)庫中的所有的通信是通過此唯一的連接對象。因為是針對類的關(guān)系而言,所以一個對象對應(yīng)多個類的實例化。返回表示查詢返回表示其它操作。 JDBC是什么? JDBC是一個Java API,用中文可以通俗的解釋為,使用Java語言訪問訪問數(shù)據(jù)庫的一套接口集合。這是調(diào)用者(程序員)和實行者(數(shù)據(jù)庫廠商...
摘要:學(xué)習(xí)筆記有官方的中文開發(fā)文檔并且針對使用者比較友好是一款優(yōu)秀的持久層框架,它支持定制化存儲過程以及高級映射。它只和配置有關(guān),存在的意義僅在于用來減少類完全限定名的冗余,為了簡化中的書寫。 Mybatis學(xué)習(xí)筆記 mybatis有官方的中文開發(fā)文檔并且針對使用者比較友好:http://www.mybatis.org/mybatis-3/zh/ MyBatis 是一款優(yōu)秀的持久層框架,它支...
摘要:不管是還是,表之間的連接查詢,被映射為實體類之間的關(guān)聯(lián)關(guān)系,這樣,如果兩個實體類之間沒有實現(xiàn)關(guān)聯(lián)關(guān)系,你就不能把兩個實體或者表起來查詢。 因為項目需要選擇數(shù)據(jù)持久化框架,看了一下主要幾個流行的和不流行的框架,對于復(fù)雜業(yè)務(wù)系統(tǒng),最終的結(jié)論是,JOOQ是總體上最好的,可惜不是完全免費,最終選擇JDBC Template。 Hibernate和Mybatis是使用最多的兩個主流框架,而JOO...
摘要:事實上,實現(xiàn)了接口,而也實現(xiàn)了接口。還記得之前說的,使用之后,其返回的實際上是一個裝飾器嗎。所以修改如下是默認全局工廠名稱,請使用別的名稱工廠已經(jīng)配置完成,請不要重復(fù)配置。 這是做個數(shù)據(jù)庫幫助庫雛形 的當(dāng)晚的再一次嘗試 ORZ 在意識到原來的 ConnectionProvider 提供的只是一個普通(實現(xiàn)了AutoCloseable接口)的 Connection,這在 Reposito...
摘要:常用的方法創(chuàng)建向數(shù)據(jù)庫發(fā)送的對象。創(chuàng)建執(zhí)行存儲過程的對象設(shè)置事務(wù)自動提交提交事務(wù)回滾事務(wù)對象對象用于向數(shù)據(jù)庫發(fā)送語句,對數(shù)據(jù)庫的增刪改查都可以通過此對象發(fā)送語句完成。 1.什么是JDBC JDBC全稱為:Java Data Base Connectivity,它是可以執(zhí)行SQL語句的Java API 2.為什么我們要用JDBC 市面上有非常多的數(shù)據(jù)庫,本來我們是需要根據(jù)不同的數(shù)據(jù)庫學(xué)...
閱讀 3568·2023-04-26 02:31
閱讀 3711·2021-11-23 09:51
閱讀 1348·2021-11-17 09:33
閱讀 2509·2021-11-16 11:45
閱讀 2628·2021-10-11 11:12
閱讀 2500·2021-09-22 15:22
閱讀 2797·2021-09-04 16:40
閱讀 2650·2021-07-30 15:30