1)什麼是JDBC?
JDBC代表Java數據庫連接。JDBC是與數據庫進行通信並執行SQLquery的Java API。
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連接?
代碼說明如下:
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語句執行存儲過程。以下是代碼:
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應用程序與數據源進行交互
在3層模式命令中,重定向到服務的“中間層”。之後,命令發送到數據源。
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數據類型,其中圖像作為字節流存儲。以下代碼顯示瞭如何將圖像插入數據庫。