【019】JavaWeb面試題(一):JDBC

開篇介紹

你們好,我是Java最全面試題庫提褲姐,今天這篇是JavaWeb系列的第一篇,主要總結了Java中的JDBC相關的問題,在後續,會沿着第一篇開篇的知識線路一直總結下去,作到日更!若是我能作到百日百更,但願你也能夠跟着百日百刷,一百天養成一個好習慣。java

什麼是JDBC?

JDBC的全稱是Java DataBase Connection,也就是Java數據庫鏈接,咱們能夠用它來操做關係型數據庫。
JDBC接口及相關類在java.sql包和javax.sql包裏。
咱們能夠用它來鏈接數據庫,執行SQL查詢,存儲過程,並處理返回的結果。面試

原生 JDBC操做數據庫流程?

1.Class.forName()加載數據庫鏈接驅動;
2.DriverManager.getConnection()獲取數據鏈接對象;
3.根據 SQL 獲取 sql 會話對象,有 2 種方式 Statement、PreparedStatement ;
4.執行 SQL 處理結果集,執行 SQL 前若是有參數值就設置參數值 setXXX();
5.關閉結果集、關閉會話、關閉鏈接。sql

JDBC中的Statement 和PreparedStatement的區別?

  • PreparedStatement 繼承於 Statement,PreparedStatement 實例包含已編譯的 SQL 語句,因此其執行

速度要快於 Statement 對象。數據庫

  • 做爲Statement的子類 , PreparedStatement 繼承了 Statement 的全部功能 。三 種 方法 execute、 executeQuery 和 executeUpdate 已被更改以使之再也不須要參數
  • Statement 通常用於執行固定的沒有參數的SQL
  • PreparedStatement 通常用於執行有?參數預編譯的SQL語句。
  • PreparedStatement支持?操做參數,相對於Statement更加靈活。
  • PreparedStatement能夠防止SQL注入,安全性高於Statement。

在 JDBC 應用中,在任什麼時候候都不要使用 Statement,緣由以下:
①代碼的可讀性和可維護性.Statement 須要不斷地拼接,而 PreparedStatement 不會。
②PreparedStatement 盡最大可能提升性能.DB 有緩存機制,相同的預編譯語句再次被調用不會再次須要
編譯。
③最重要的一點是極大地提升了安全性.Statement 容易被 SQL 注入,而 PreparedStatementc 傳入的內容不會和 sql 語句發生任何匹配關係。緩存

關係數據庫中鏈接池的機制是什麼?

前提:爲數據庫鏈接創建一個緩衝池。
1:從鏈接池獲取或建立可用鏈接
2:使用完畢以後,把鏈接返回給鏈接池
3:在系統關閉前,斷開全部鏈接並釋放鏈接佔用的系統資源
4:可以處理無效鏈接,限制鏈接池中的鏈接總數不低於或者不超過某個限定值。安全

JDBC是如何實現的Java程序和JDBC驅動的鬆耦合的?

經過制定接口,數據庫廠商來實現。咱們只要經過接口調用便可。
驅動只有在經過的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的更新方法來更新裏面的數據。

常見的JDBC異常有哪些?

  • java.sql.SQLException:JDBC異常的基類。
  • java.sql.BatchUpdateException:當批處理操做執行失敗的時候可能會拋出這個異常。這取決於具體的JDBC驅動的實現,它也可能直接拋出基類異常java.sql.SQLException中。
  • java.sql.SQLWarning:SQL操做出現的警告信息。
  • java.sql.DataTruncation:字段值因爲某些非正常緣由被截斷了

JDBC的DataSource是什麼,有什麼好處?

DataSource即數據源,它是定義在javax.sql中的一個接口,跟DriverManager相比,它的功能要更強大。咱們能夠用它來建立數據庫鏈接,固然驅動的實現類會實際去完成這個工做。除了能建立鏈接外,它還提供了以下的特性:大數據

  • 緩存PreparedStatement以便更快的執行
  • 能夠設置鏈接超時時間
  • 提供日誌記錄的功能
  • ResultSet大小的最大閾值設置
  • 經過JNDI的支持,能夠爲servlet容器提供鏈接池的功能

execute,executeQuery,executeUpdate的區別是什麼?

  • execute能夠用來執行任意SQL語句,返回一個boolean的值,代表該語句是否返回了一個結果集對象ResultSet。
  • executeUpdate 用來執行修改,插入,刪除操做,執行SELECT會拋出異常
  • executeQuery只能進行SELECT,從而獲得結果集對象,DELETE、UPDATE、INSERT操做都會拋出異常
一般咱們不使用execute,若是你不知道要執行的SQL語句是什麼類型的,就可使用execute。

數據庫鏈接池的原理。爲何要使用鏈接池?

數據庫鏈接是一種關鍵的有限的昂貴的資源,對數據庫鏈接的管理能顯著影響到整個應用程序的伸縮性和健壯性,影響到程序的性能指標。數據庫鏈接池正是針對這個問題提出來的。
數據庫鏈接池負責分配、管理和釋放數據庫鏈接,它容許應用程序重複使用一個現有的數據庫鏈接,而不是從新創建一個;釋放空閒時間超過最大空閒時間的數據庫鏈接來避免由於沒有釋放數據庫鏈接而引發的數據庫鏈接遺漏。這項技術能明顯提升對數據庫操做的性能。
數據庫鏈接池在初始化時將建立必定數量的數據庫鏈接放到鏈接池中,這些數據庫鏈接的數量是由最小數據庫鏈接數來設定的。不管這些數據庫鏈接是否被使用,鏈接池都將一直保證至少擁有這麼多的鏈接數量。鏈接池的最大數據庫鏈接數量限定了這個鏈接池能佔有的最大鏈接數,當應用程序向鏈接池請求的鏈接數超過最大鏈接數量時,這些請求將被加入到等待隊列中。

JDBC的DriverManager是用來作什麼的?

JDBC的DriverManager是一個工廠類,咱們經過它來建立數據庫鏈接。當JDBC的Driver類被加載進來時,它會本身註冊到DriverManager類裏面,而後咱們會把數據庫配置信息傳成DriverManager.getConnection()方法,DriverManager會使用註冊到它裏面的驅動來獲取數據庫鏈接,並返回給調用的程序。

RowSet和ResultSet的區別?

RowSet繼承自ResultSet,所以它有ResultSet的所有功能,同時它本身添加了些額外的特性。RowSet一個最大的好處是它能夠是離線的,這樣使得它更輕量級,同時便於在網絡間進行傳輸。

相關文章
相關標籤/搜索