Java程序員和數據庫管理員JDBC問答TOP 50,它們已融進了你的開發靈魂!

編程語言 DBA SQL IT168企業級 IT168企業級 2017-08-04

1)什麼是JDBC?

JDBC代表Java數據庫連接。JDBC是與數據庫進行通信並執行SQLquery的Java API。

Java程序員和數據庫管理員JDBC問答TOP 50,它們已融進了你的開發靈魂!

2)什麼是JDBC驅動程序和可用的JDBC驅動程序數量?

JDBC驅動程序包含幫助Java應用程序和數據庫的類和接口。

有4種類型的JDBC驅動程序。

  • Type 1驅動程序或JDBC-ODBC bridge驅動程序。

  • Type 2驅動程序或Native-API,部分為Java驅動程序。

  • Type 3驅動程序或網絡協議,純Java驅動程序。

  • Type 4驅動程序或本機協議,純Java驅動程序。

3)如何將MySQL或Oracle與Java連接?

Java程序員和數據庫管理員JDBC問答TOP 50,它們已融進了你的開發靈魂!

代碼說明如下:

Class.forName創建一個JDBC驅動程序實例,並使用DriverManager進行註冊。

getConnection()方法始終建立與數據庫的連接。

我們需要從上面的連接對象創建一個Statement對象。該語句將返回resultset對象。ResultSet.next()表示如果結果集合仍然返回行。

4)哪個JDBC驅動是最快的驅動程序?

類型4驅動程序或本機協議,純Java驅動程序,是最快的驅動程序。

5)什麼是JDBC API組件?

有四種類型的組件

  • JDBC API

  • JDBC驅動程序管理器

  • JDBC測試套件

  • JDBC-ODBC bridge

6)什麼是JDBC statements

有三種類型的JDBC語句,如下所示:

  • statements:它將對數據庫執行SQL查詢(靜態SQL查詢)。

  • Prepared Statement:當我們要重複執行SQL語句時使用。輸入數據是動態的,並在運行時輸入。

  • Callable Statement:當我們要執行存儲過程時使用。

7)我們如何執行存儲過程?

可以使用JDBCcallable語句執行存儲過程。以下是代碼:

Java程序員和數據庫管理員JDBC問答TOP 50,它們已融進了你的開發靈魂!

8)在Java中使用PreparedStatement有什麼好處?

Prepared Statement用於重複執行相同的SQL語句。即使使用“n”次,準備好的語句只能編譯一次

9)什麼是ResultSet?

java.sql.ResultSet接口意味著SQL查詢的結果集。這意味著光標指向表的一行;它指向第一行之前。

10)什麼是ResultSet的類型?

有三種類型的ResultSet可用。如果我們不聲明任何ResultSet,這意味著我們正在調用TYPE_FORWARD_ONLY

  • TYPE_FORWARD_ONLY:遊標只能向前移動的類型。

  • TYPE_SCROLL_INSENSITIVE:遊標可以前後移動,但對修改不敏感。

  • TYPE_SCROLL_SENSITIVE:遊標可以向前和向後移動,但修改敏感

11)解釋JDBC中RowSet與ResultSet之間的區別?

在與DB的ResultSet句柄連接中,我們不能將Result作為序列化對象。

由於上述問題,我們無法通過網絡傳遞Resultset。

RowSet擴展了ResultSet接口,因此它保存了ResultSet中的所有方法。RowSet被序列化。

因此,我們可以將Rowset從一個類傳遞給另一個類,因為它與數據庫沒有連接。

12)為什麼要在JDBC中使用setAutoCommit(false)?

如果要關閉自動提交,請設置connection.setAutoCommit(false)

13)JDBC中的數據庫警告是什麼?我們如何在JDBC中處理數據庫警告?

SQL警告或數據庫警告是SQLException類的子類。我們可以通過在Connection,Statement和ResultSet上使用getWarnings()方法處理它

14)我可以得到一個null ResultSet嗎?

不,我們不能得到null Resultset。如果下一個記錄不包含行,ResultSet.next()可以返回null。

15)元數據是什麼意思?為什麼我們使用它?

元數據是指有關其他數據的數據或信息。我們使用元數據獲取數據庫產品版本,驅動程序名稱,表和視圖的總數。

16)在JDBC中執行executeQuery,executeUpdate有什麼區別?

  • execute():它可以用於任何類型的SQL Query。

  • executeQuery():它可以用於select查詢。

  • executeUpdate():它可以用於更改/更新表。

17)什麼是數據庫連接池?使用連接池的優點?

連接池意味著連接將被存儲在緩存中,我們將來可以重用它們。

優點:

  • 它更快

  • 連接池變得更容易診斷和分析數據庫連接。

18)DriverManager類的功能是什麼?

它是用戶和驅動程序之間的接口。 DriverManager跟蹤數據庫和相應驅動程序之間的所有活動。

19)批量更新的含義是什麼?

批量更新意味著一次執行一組SQL查詢。

批量更新只能用於插入,更新和刪除,但不能用於選擇查詢。

20)JDBC API中有多少包?

JDBC API中提供了兩種類型的軟件包

  • java.sql

  • javax.sql

21)execute,executeQuery和executeUpdate的返回類型是什麼?

  • execute的返回類型是Boolean

  • executeQuery的返回類型是ResultSet對象

  • executeUpdate的返回類型為int

22)結果集(Result Set)的索引以0或1開始?

結果集的索引以1開頭。

23)加載驅動程序時Class.forName的作用是什麼?

Class.forName創建一個JDBC驅動程序實例,並使用DriverManager進行註冊。

24)JDBC-ODBC Bridge是否是多線程?

不,JDBC-ODBC Bridge使用synchronized方法來序列化對ODBC進行的所有調用。

25)哪個接口處理JDBC中的事務管理?

連接接口處理JDBC中的事務管理。它提供了commit(),rollback()等的方法

26)為什麼“No suitable driver”錯誤發生?

當我們調用DriverManager.getConnection方法時,No suitable driver會發生

可能會出現以下原因:

在調用getConnection方法之前無法加載精確的JDBC驅動程序。

它可能是無效或錯誤的JDBC URL。

27)準備的Statements更快。為什麼?

準備的Statements執行比直接執行更快,因為Statements只被編譯一次。準備Statements和JDBC驅動程序在執行期間彼此連接,並且沒有連接開銷。

28)是否可以連接到多個數據庫?使用單一statement可以更新還是從兩個或三個數據庫中提取數據?

是的,可以同時連接到多個數據庫,但這取決於具體的驅動程序。

要從不同的數據庫更新和提取數據,我們可以使用單個statement。但是我們需要中間件來處理多個數據庫或單個數據庫。

29)告訴我setMaxRows(int)和SetFetchSize(int)之間的區別?

  • setMaxRows(int):定義每個結果集可以包含多少行

  • SetFetchSize(int):定義將從數據庫讀取的行數。

30)告訴我特殊字符?

一個特殊字符之前是一個轉義字符。比如,SELECT NAME FROM TABLE WHERE NAME LIKE'\ _%'{escape'\'}

31)數據庫中“dirty read”的含義是什麼?

dirty read意味著“讀取可能正確或可能不正確的值”。

32)兩段提交是什麼意思?

在分佈式事務處理中使用兩階段提交。如果任何事務正在執行,並且會影響多個數據庫。將使用兩階段提交來使所有數據庫彼此同步。

33)JDBC中有多少鎖定系統?

JDBC中提供了兩種類型的鎖定,我們可以處理多個用戶。

如果兩個用戶正在查看相同的記錄,則不會進行任何鎖定。如果一個用戶正在更新記錄,並且第二個用戶也正在更新相同的記錄。那時候我們要用鎖。

  • 樂觀鎖(Optimistic Locking):只有當我們要“更新”時,才會鎖定記錄。

  • 悲觀鎖(Pessimistic Locking):它將鎖定記錄從“選擇”來查看,更新和提交時間。

34)JDBC中有什麼異常類型?

JDBC中有四種異常類型。

  • batchUpdate異常

  • 數據截斷

  • SQL異常

  • SQL警告

35)給出使用JDBC連接數據庫的步驟?

使用JDBC連接數據庫有兩種方法

  • 1.使用DriverManager:

它將在class.forName(驅動程序類)和Class.forName()的幫助下加載驅動程序類。

後加載它將通過控件到DriverManager。

DriverManager.getConnection()將創建連接以訪問數據庫。

  • 2.使用DataSource:

對於DataSource,無需在JNDI的幫助下使用DriverManager。它將從Naming服務器查找DataSource。 DataSource.getConnection()方法將Connection對象返回給DB。

36)解釋JDBC架構?

JDBC API支持數據庫的2層和3層模型。

在2層模型中,Java應用程序與數據源進行交互

Java程序員和數據庫管理員JDBC問答TOP 50,它們已融進了你的開發靈魂!

在3層模式命令中,重定向到服務的“中間層”。之後,命令發送到數據源。

Java程序員和數據庫管理員JDBC問答TOP 50,它們已融進了你的開發靈魂!

37)JDBC 4.0中有哪些新功能?

新功能是:

  • 通過JDBC驅動程序類自動加載

  • 增強的連接管理

  • 啟用RowId SQL

  • 數據集由SQL通過使用註釋實現

  • SQL異常處理的增強

  • 支持SQL XML文件

38)JDBC中使用的是什麼包?

JDBC中使用8個包:

  • sql.Driver

  • Connection

  • Statement

  • PreparedStatement

  • CallableStatement

  • ResultSet

  • ResultSetMetaData

  • DatabaseMetaData

39)JDBC中有多少RowSet可用?

有兩種類型的RowSet可用:

  • 已連接 - 連接的RowSet對象即時連接到數據庫。如果應用程序終止,則連接的RowSet對象也將終止。

  • 斷開連接 - 斷開的RowSet對象在執行所需查詢後連接到數據庫。

40)連接(Connection)的意思是什麼?

連接接口包括與數據庫交互的方法。

41)解釋JDBC Savepoint?

保存點(Savepoint)表示當前事務可以回滾到的點。而不是將其所有更改轉回來,它可以選擇僅回滾其中的一些。

42)列出使用DataSource的優點?

數據源是管理員和程序員/開發人員之間的分工。

管理員創建一個DataSource對象並將其綁定到JNDI註冊表。程序員/開發人員從註冊表中檢索DataSource對象。然後它將建立與數據庫的連接。

43)為什麼我們需要一個JdbcRowSet的原因,就像在ResultSet周圍的包裝器?

我們可以使用ResultSet對象作為JavaBeans組件。

JdbcRowSet也可以用作JavaBeans組件。這就是為什麼它可以在設計或編譯時創建和配置,並在運行時執行。

所有jdbcRowSet對象都是可滾動和可更新的。

44)我們可以查看一個結果集(result set)的方式有多少?

有兩種方法來查看ResultSet

  • column

  • column index

示例:getInt(String columnName),getInt(int columnIndex)

45)可以更新結果集(result set)有多少種方式?

以下方法可幫助更新result set

  • updateRow()

  • deleteRow()

  • refreshRow()

  • cancelRowUpdates()

  • insertRow()

46)為什麼要用Java關閉數據庫連接?

作為最佳實踐,我們必須關閉resultset,statement和connection 。如果connection來自池,則在關閉時,將連接發送回池以供重用。我們在finally {}塊中這樣做,因為如果發生任何異常,我們仍然有機會關閉。

47)為什麼在JDBC中使用blob數據類型?

這些用於將大量數據存儲到數據庫中,如圖像,電影等。

48)如何在ResultSet中設置屬性併發性?

有兩個併發級別

CONCUR_READ_ONLY - 僅供閱讀。

CONCUR_UPDATABLE - 用於讀取和更新。

49)客戶端和服務器數據庫遊標有什麼區別?

服務器端遊標表示數據和結果保存在服務器上。只有當請求的數據被髮送到客戶端時。

客戶端遊標表示發送到客戶端位置的所有數據。

50)如何使用JDBC將圖像插入數據庫?

數據庫中的圖像使用BLOB數據類型,其中圖像作為字節流存儲。以下代碼顯示瞭如何將圖像插入數據庫。

Java程序員和數據庫管理員JDBC問答TOP 50,它們已融進了你的開發靈魂!

相關推薦

推薦中...