你們好,我是Java最全面試題庫
的提褲姐
,今天這篇是JavaWeb系列的第一篇,主要總結了Java中的JDBC相關的問題,在後續,會沿着第一篇開篇的知識線路一直總結下去,作到日更!若是我能作到百日百更,但願你也能夠跟着百日百刷,一百天養成一個好習慣。java
JDBC的全稱是Java DataBase Connection
,也就是Java數據庫鏈接
,咱們能夠用它來操做關係型數據庫。
JDBC接口及相關類在java.sql包和javax.sql包裏。
咱們能夠用它來鏈接數據庫,執行SQL查詢,存儲過程,並處理返回的結果。面試
1.Class.forName()
加載數據庫鏈接驅動;
2.DriverManager.getConnection()
獲取數據鏈接對象;
3.根據 SQL 獲取 sql 會話對象,有 2 種方式 Statement、PreparedStatement ;
4.執行 SQL 處理結果集,執行 SQL 前若是有參數值就設置參數值 setXXX();
5.關閉結果集、關閉會話、關閉鏈接。sql
速度要快於 Statement 對象。數據庫
在 JDBC 應用中,在任什麼時候候都不要使用 Statement,緣由以下:
①代碼的可讀性和可維護性.Statement 須要不斷地拼接,而 PreparedStatement 不會。
②PreparedStatement 盡最大可能提升性能.DB 有緩存機制,相同的預編譯語句再次被調用不會再次須要
編譯。
③最重要的一點是極大地提升了安全性.Statement 容易被 SQL 注入,而 PreparedStatementc 傳入的內容不會和 sql 語句發生任何匹配關係。緩存
前提:爲數據庫鏈接創建一個緩衝池。
1:從鏈接池獲取或建立可用鏈接
2:使用完畢以後,把鏈接返回給鏈接池
3:在系統關閉前,斷開全部鏈接並釋放鏈接佔用的系統資源
4:可以處理無效鏈接,限制鏈接池中的鏈接總數不低於或者不超過某個限定值。安全
經過制定接口,數據庫廠商來實現。咱們只要經過接口調用便可。
驅動只有在經過的Class.forName反射機制來加載的時候纔會出現。網絡
一共有三種ResultSet
對象。併發
ResultSet.TYPE_FORWARD_ONLY
:這是默認的類型,它的遊標只能往下移。ResultSet.TYPE_SCROLL_INSENSITIVE
:遊標能夠上下移動,一旦它建立後,數據庫裏的數據再發生修改,對它來講是透明的。ResultSet.TYPE_SCROLL_SENSITIVE
:遊標能夠上下移動,若是生成後數據庫還發生了修改操做,它是可以感知到的。ResultSet中有兩種併發類型。性能
ResultSet.CONCUR_READ_ONLY
:ResultSet是隻讀的,這是默認類型。ResultSet.CONCUR_UPDATABLE
:咱們可使用的ResultSet的更新方法來更新裏面的數據。java.sql.SQLException
:JDBC異常的基類。java.sql.BatchUpdateException
:當批處理操做執行失敗的時候可能會拋出這個異常。這取決於具體的JDBC驅動的實現,它也可能直接拋出基類異常java.sql.SQLException中。java.sql.SQLWarning
:SQL操做出現的警告信息。java.sql.DataTruncation
:字段值因爲某些非正常緣由被截斷了DataSource即數據源,它是定義在javax.sql中的一個接口,跟DriverManager相比,它的功能要更強大。咱們能夠用它來建立數據庫鏈接,固然驅動的實現類會實際去完成這個工做。除了能建立鏈接外,它還提供了以下的特性:大數據
一般咱們不使用execute,若是你不知道要執行的SQL語句是什麼類型的,就可使用execute。
數據庫鏈接是一種關鍵的有限的昂貴的資源,對數據庫鏈接的管理能顯著影響到整個應用程序的伸縮性和健壯性,影響到程序的性能指標。數據庫鏈接池正是針對這個問題提出來的。
數據庫鏈接池負責分配、管理和釋放數據庫鏈接,它容許應用程序重複使用一個現有的數據庫鏈接,而不是從新創建一個;釋放空閒時間超過最大空閒時間的數據庫鏈接來避免由於沒有釋放數據庫鏈接而引發的數據庫鏈接遺漏。這項技術能明顯提升對數據庫操做的性能。
數據庫鏈接池在初始化時將建立必定數量的數據庫鏈接放到鏈接池中,這些數據庫鏈接的數量是由最小數據庫鏈接數來設定的。不管這些數據庫鏈接是否被使用,鏈接池都將一直保證至少擁有這麼多的鏈接數量。鏈接池的最大數據庫鏈接數量限定了這個鏈接池能佔有的最大鏈接數,當應用程序向鏈接池請求的鏈接數超過最大鏈接數量時,這些請求將被加入到等待隊列中。
JDBC的DriverManager是一個工廠類,咱們經過它來建立數據庫鏈接。當JDBC的Driver類被加載進來時,它會本身註冊到DriverManager類裏面,而後咱們會把數據庫配置信息傳成DriverManager.getConnection()
方法,DriverManager會使用註冊到它裏面的驅動來獲取數據庫鏈接,並返回給調用的程序。
RowSet繼承自ResultSet,所以它有ResultSet的所有功能,同時它本身添加了些額外的特性。RowSet一個最大的好處是它能夠是離線的,這樣使得它更輕量級,同時便於在網絡間進行傳輸。