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