50 câu hỏi phỏng vấn JDBC hàng đầu và câu trả lời (2025)

Dưới đây là những câu hỏi phỏng vấn về Kết nối cơ sở dữ liệu Java (JDBC) và câu trả lời dành cho người mới bắt đầu cũng như ứng viên có kinh nghiệm để có được công việc mơ ước của mình.

Tải xuống PDF miễn phí: Câu hỏi phỏng vấn JDBC


1) JDBC là gì?

JDBC là viết tắt của Java Database Connectivity. JDBC là một Java API giao tiếp với cơ sở dữ liệu và thực thi SQLquery.


2) Trình điều khiển JDBC là gì và có bao nhiêu trình điều khiển JDBC?

Trình điều khiển JDBC chứa các lớp và giao diện hỗ trợ ứng dụng và cơ sở dữ liệu Java.

Có 4 loại trình điều khiển JDBC.

  1. Trình điều khiển loại 1 hoặc trình điều khiển cầu nối JDBC-ODBC.
  2. Trình điều khiển loại 2 hoặc bản địa-API, một phần là trình điều khiển Java.
  3. Trình điều khiển loại 3 hoặc Giao thức mạng, trình điều khiển Java thuần túy.
  4. Trình điều khiển loại 4 hoặc giao thức gốc, trình điều khiển Java thuần túy.

3) Làm thế nào tôi có thể kết nối MySQL hoặc Oracle với Java?

//for MySQL {
try {

Class.forName ("com.mysql.jdbc.Driver");

con=DriverManager.getConnection ("jdbc: mysql://localhost:3306/dbanme", "username", "password");

Statement st=con.createstatement ();

Resultset rs=st.executeQuery ("select * from user");

rs.next (); catch (ClassNotFoundException e) {

System.err.println ("ClassNotFoundException in get Connection," + e.getMessage()); }

catch (SQLException e) {

System.err.println ("SQLException in getConnection," + e.getMessage ()) ;}

//for oracle

{

try

{

Class.forName ("oracle.jdbc.driver.OracleDriver");

con= DriverManager.getConnection ("jdbc:oracle:thin:@localhost:1521:dbname", "username", "password");

Statement st=con.createstatement();

Resultset rs=st.executeQuery("select * from user");

Rs.next();

} catch (ClassNotFoundException e) {

System.err.println("ClassNotFoundException in get Connection," +e.getMessage()); }

catch (SQLException e) {

System.err.println("SQLException in getConnection, " + e.getMessage()); } return con; }

Giải thích mã

Class.forName tạo một phiên bản của trình điều khiển JDBC và đăng ký với DriverManager.

Phương thức getConnection() luôn thiết lập kết nối tới cơ sở dữ liệu.

Chúng ta cần tạo một đối tượng Statement từ đối tượng kết nối ở trên. Câu lệnh sẽ trả về đối tượng resultset. ResultSet.next() có nghĩa là Nếu tập kết quả vẫn trả về hàng.


4) Trình điều khiển JDBC nào là nhanh nhất?

Trình điều khiển loại 4 hoặc giao thức gốc, trình điều khiển Java thuần túy, là trình điều khiển nhanh nhất.


5) Các thành phần API JDBC là gì?

Có bốn loại thành phần

  1. API JDBC
  2. Trình quản lý trình điều khiển JDBC
  3. Bộ kiểm tra JDBC
  4. Cầu nối JDBC-ODBC
Câu hỏi phỏng vấn JDBC
Câu hỏi phỏng vấn JDBC

6) Câu lệnh JDBC là gì?

Có 3 loại câu lệnh JDBC như sau:

  1. Tuyên bố: Nó sẽ thực thi SQL truy vấn (truy vấn SQL tĩnh) đối với cơ sở dữ liệu.
  2. Tuyên bố đã chuẩn bị: Được sử dụng khi chúng ta muốn thực thi câu lệnh SQL nhiều lần. Dữ liệu đầu vào là dữ liệu động và được lấy vào thời điểm chạy.
  3. Câu lệnh Callable: Được sử dụng khi chúng ta muốn thực thi các thủ tục được lưu trữ.

7) Làm thế nào để thực thi các thủ tục được lưu trữ?

Các thủ tục được lưu trữ có thể được thực thi bằng cách sử dụng câu lệnh JDBCcallable. Đây là mã.

Connection conn = null;

CallableStatement callStmt = conn.prepareCall("{call myStoreproc(?, ?)}");

callStmt.setString(1, "abcdefg");


8) Ưu điểm của việc sử dụng PreparedStatement trong Java là gì?

Prepared Statement được sử dụng để thực thi các câu lệnh SQL giống nhau nhiều lần. Prepared statement chỉ được biên dịch một lần mặc dù nó đã sử dụng "n" lần


9) ResultSet là gì?

Giao diện java.sql.ResultSet có nghĩa là tập kết quả của truy vấn SQL. Điều này có nghĩa là con trỏ trỏ đến một hàng của bảng; nó trỏ đến trước hàng đầu tiên.


10) Có những loại ResultSet nào?

Có ba loại ResultSet khả dụng. Nếu chúng ta không khai báo bất kỳ ResultSet nào có nghĩa là chúng ta đang gọi TYPE_FORWARD_ONLY

  1. TYPE_FORWARD_ONLY: con trỏ chỉ có thể di chuyển về phía trước.
  2. TYPE_SCROLL_INSENSITIVE: con trỏ có thể di chuyển về phía trước và phía sau nhưng không nhạy.
  3. TYPE_SCROLL_SENSITIVE: con trỏ có thể di chuyển về phía trước và phía sau, nhưng nó nhạy cảm

11) Giải thích sự khác biệt giữa RowSet và ResultSet trong JDBC?

Trong kết nối xử lý ResultSet tới DB, chúng ta không thể biến Result thành một đối tượng được tuần tự hóa.

Do vấn đề trên, chúng ta không thể truyền Resultset qua mạng.

RowSet mở rộng giao diện ResultSet, do đó nó chứa tất cả các phương thức từ ResultSet. RowSet được tuần tự hóa.

Vì vậy, chúng ta có thể truyền Rowset từ lớp này sang lớp khác vì nó không có kết nối với cơ sở dữ liệu.


12) Tại sao bạn nên sử dụng setAutoCommit(false) trong JDBC?

Nếu bạn muốn Tắt Tự động cam kết thì hãy thiết lập connection.setAutoCommit(false)


13) Cảnh báo cơ sở dữ liệu trong JDBC là gì và chúng ta có thể xử lý cảnh báo cơ sở dữ liệu trong JDBC như thế nào?

SQL warning hoặc Database warning là lớp con của lớp SQLException. Chúng ta có thể xử lý bằng cách sử dụng phương thức getWarnings() trên Connection, Statement và ResultSet


14) Tôi có thể nhận được ResultSet null không?

Không, chúng ta không thể lấy được ResultSet null. ResultSet.next() có thể trả về null nếu bản ghi tiếp theo không chứa một hàng.


15) Bạn có ý gì khi nói đến Siêu dữ liệu và tại sao chúng ta sử dụng nó?

Siêu dữ liệu có nghĩa là dữ liệu hoặc thông tin về dữ liệu khác. Chúng tôi sử dụng siêu dữ liệu để lấy phiên bản sản phẩm cơ sở dữ liệu, tên trình điều khiển, tổng số bảng và chế độ xem.


16) Sự khác biệt giữa execute, executeQuery, executeUpdate trong JDBC là gì?

execute(): có thể sử dụng cho bất kỳ loại truy vấn SQL nào.

executeQuery(): có thể được sử dụng để chọn truy vấn.

executeUpdate(): có thể dùng để thay đổi/cập nhật bảng.


17) Kết nối cơ sở dữ liệu là gì? Ưu điểm của việc sử dụng kết nối?

Nhóm kết nối có nghĩa là các kết nối sẽ được lưu trữ trong bộ nhớ đệm và chúng ta có thể sử dụng lại chúng trong tương lai.

Lợi thế:

  1.  Nó nhanh hơn
  2.  Việc gộp kết nối giúp chẩn đoán và phân tích kết nối cơ sở dữ liệu dễ dàng hơn.

18) Chức năng của lớp DriverManager là gì?

Đây là giao diện giữa người dùng và trình điều khiển. DriverManager theo dõi mọi hoạt động giữa cơ sở dữ liệu và trình điều khiển thích hợp.


19) Cập nhật hàng loạt có nghĩa là gì?

Cập nhật hàng loạt có nghĩa là thực hiện một tập hợp/nhóm truy vấn SQL cùng một lúc.

Cập nhật hàng loạt chỉ có thể được sử dụng cho lệnh chèn, cập nhật và xóa nhưng không thể sử dụng cho truy vấn chọn.


20) Có bao nhiêu gói có sẵn trong JDBC API?

Có hai loại gói có sẵn trong JDBC API

  1. java.sql
  2. javax.sql

21) Kiểu trả về của execute, executeQuery và executeUpdate là gì?

Kiểu trả về của execute là Boolean

Kiểu trả về của executeQuery là đối tượng ResultSet

Kiểu trả về của executeUpdate là int


22) Chỉ số của tập kết quả bắt đầu bằng 0 hoặc 1?

Chỉ số của Bộ kết quả bắt đầu bằng 1.


23) Vai trò của Class.forName khi tải trình điều khiển là gì?

Class.forName tạo một phiên bản của trình điều khiển JDBC và đăng ký với DriverManager.


24) Cầu nối JDBC-ODBC có đa luồng hay không?

Không, JDBC-ODBC Bridge sử dụng các phương thức đồng bộ để tuần tự hóa tất cả các lệnh gọi tới ODBC.


25) Giao diện nào xử lý việc quản lý giao dịch trong JDBC?

Giao diện kết nối xử lý quản lý giao dịch trong JDBC. Nó cung cấp phương thức cho commit(), rollback(), v.v.


26) Tại sao xảy ra lỗi “Không có trình điều khiển phù hợp”?

"Không có trình điều khiển phù hợp" xảy ra khi chúng ta gọi phương thức DriverManager.getConnection,

điều này có thể xảy ra vì những lý do sau:

  • không thể tải trình điều khiển JDBC chính xác trước khi gọi phương thức getConnection.
  • Có thể URL JDBC không hợp lệ hoặc sai.

27) Câu lệnh đã chuẩn bị nhanh hơn. Tại sao?

Thực thi câu lệnh đã chuẩn bị nhanh hơn thực thi trực tiếp vì câu lệnh chỉ được biên dịch một lần. Câu lệnh đã chuẩn bị & trình điều khiển JDBC được kết nối với nhau trong quá trình thực thi và không có chi phí kết nối.


28) Có thể kết nối với nhiều cơ sở dữ liệu không? Sử dụng một câu lệnh, chúng ta có thể cập nhật hoặc trích xuất dữ liệu từ hai, ba hoặc nhiều cơ sở dữ liệu không?

Có, bạn có thể kết nối với nhiều cơ sở dữ liệu cùng một lúc, nhưng điều này phụ thuộc vào trình điều khiển cụ thể.

Để cập nhật và trích xuất dữ liệu từ các cơ sở dữ liệu khác nhau, chúng ta có thể sử dụng một câu lệnh duy nhất. Nhưng chúng ta cần phần mềm trung gian để xử lý nhiều cơ sở dữ liệu hoặc một cơ sở dữ liệu duy nhất.


29) Hãy cho tôi biết sự khác biệt giữa setMaxRows(int) và SetFetchSize(int)?

đặtMaxRows(int) ĐặtFetchSize(int)?
Xác định số lượng hàng mà một tập kết quả có thể chứa tại một thời điểm Xác định số lượng hàng sẽ được đọc từ cơ sở dữ liệu.

30) Hãy cho tôi biết về các ký tự đặc biệt?

Một ký tự đặc biệt được đặt trước bởi một ký tự thoát. Ví dụ –

SELECT NAME FROM TABLE WHERE NAME LIKE '\_%' {escape '\'}

31) “dirty read” trong cơ sở dữ liệu có nghĩa là gì?

Đọc bẩn có nghĩa là “đọc giá trị có thể đúng hoặc không đúng”.


32) Ý bạn là gì khi nói đến cam kết hai giai đoạn?

Cam kết hai giai đoạn được sử dụng trong quy trình giao dịch phân tán. Nếu bất kỳ giao dịch nào đang thực hiện và nó sẽ ảnh hưởng đến nhiều cơ sở dữ liệu. Cam kết hai giai đoạn sẽ được sử dụng để đồng bộ hóa tất cả các cơ sở dữ liệu với nhau.


33) Có bao nhiêu hệ thống khóa trong JDBC?

Có hai loại khóa trong JDBC giúp chúng ta có thể xử lý nhiều người dùng.

Nếu hai người dùng đang xem cùng một bản ghi, thì không có khóa nào được thực hiện. Nếu một người dùng đang cập nhật một bản ghi và người dùng thứ hai cũng đang cập nhật cùng một bản ghi. Vào thời điểm đó, chúng ta sẽ sử dụng khóa.

  1. Khóa lạc quan: nó sẽ khóa bản ghi chỉ khi chúng ta chuẩn bị “cập nhật”.
  2. Khóa bi quan: nó sẽ khóa bản ghi khỏi thời gian “chọn” để xem, cập nhật và xác nhận.

34) Ngoại lệ trong JDBC là gì?

Có bốn loại ngoại lệ trong JDBC.

  1. ngoại lệ batchUpdate
  2. Cắt bớt dữ liệu
  3. Ngoại lệ SQL
  4. Cảnh báo SQL

35) Nêu các bước để kết nối tới DB bằng JDBC?

Có hai cách để kết nối cơ sở dữ liệu bằng JDBC

  1. Sử dụng DriverManager:

Nó sẽ tải lớp trình điều khiển với sự trợ giúp của class.forName(driver class) và Class.forName().

Sau khi tải xong, quyền điều khiển sẽ được chuyển cho DriverManager.

DriverManager.getConnection() sẽ tạo kết nối để truy cập cơ sở dữ liệu.

  1. Sử dụng DataSource:

Đối với DataSource, không cần sử dụng DriverManager với sự trợ giúp của JNDI. Nó sẽ tra cứu DataSource từ máy chủ dịch vụ Naming. Phương thức DataSource.getConnection() sẽ trả về đối tượng Connection cho DB.


36) Giải thích về kiến ​​trúc JDBC?

API JDBC hỗ trợ cả mô hình 2 tầng và 3 tầng cho cơ sở dữ liệu.

Trong mô hình 2 tầng, ứng dụng Java tương tác với nguồn dữ liệu

Trong mô hình 3 tầng, các lệnh được chuyển hướng đến một “tầng trung gian” của các dịch vụ. Sau đó, các lệnh được gửi đến nguồn dữ liệu.


37) Những tính năng mới có trong JDBC 4.0 là gì?

Các tính năng mới là

  • Tự động tải bằng lớp trình điều khiển JDBC
  • Quản lý kết nối nâng cao
  • RowId SQL đã được bật
  • Bộ dữ liệu được triển khai bằng SQL bằng cách sử dụng Chú thích
  • Cải tiến xử lý ngoại lệ SQL
  • Hỗ trợ SQL XML các tập tin

38) Những gói nào được sử dụng trong JDBC?

8 gói được sử dụng trong JDBC –

  1. sql.Trình điều khiển
  2. Kết nối
  3. Tuyên bố
  4. Chuẩn bị sẵn sàng
  5. Câu lệnh Callable
  6. Bộ kết quả
  7. Kết quảSetMetaData
  8. Cơ sở dữ liệuMetaData

39) Có bao nhiêu RowSet có sẵn trong JDBC?

Có hai loại bộ hàng có sẵn:

  1. Kết nối – Đối tượng RowSet được kết nối sẽ kết nối với cơ sở dữ liệu ngay lập tức. Nếu ứng dụng kết thúc thì đối tượng RowSet được kết nối cũng kết thúc.
  2. Đã ngắt kết nối – Đối tượng RowSet bị ngắt kết nối sẽ kết nối với cơ sở dữ liệu sau khi thực hiện truy vấn cần thiết.

40) Kết nối có nghĩa là gì?

Giao diện kết nối bao gồm các phương thức tương tác với cơ sở dữ liệu.


41) Giải thích về JDBC Savepoint?

Điểm lưu đại diện cho điểm mà giao dịch hiện tại có thể quay lại. Thay vì quay lại tất cả các thay đổi, nó có thể chọn quay lại chỉ một số thay đổi.


42) Liệt kê những lợi ích khi sử dụng DataSource?

Nguồn dữ liệu phân chia công việc giữa quản trị viên và lập trình viên/nhà phát triển.

Người quản trị tạo đối tượng DataSource và liên kết nó với sổ đăng ký JNDI. Một lập trình viên/nhà phát triển lấy đối tượng DataSource từ sổ đăng ký. Sau đó, nó sẽ thiết lập kết nối với cơ sở dữ liệu.


43) Tại sao chúng ta cần một JdbcRowSet như một wrapper xung quanh ResultSet?

Chúng ta có thể sử dụng đối tượng ResultSet như một thành phần JavaBeans.

  • JdbcRowSet cũng có thể được sử dụng như một thành phần JavaBeans. Đó là lý do tại sao nó có thể được tạo và cấu hình tại thời điểm thiết kế hoặc biên dịch và được thực thi tại thời điểm chạy.
  • Tất cả các đối tượng jdbcRowSet đều có thể cuộn và cập nhật được.

44) Có bao nhiêu cách để chúng ta có thể xem một tập kết quả?

Có 2 cách để xem ResultSet

  1. cột
  2. chỉ số cột.

Ví dụ: getInt(Tên cột chuỗi), getInt(int cộtIndex)


45) Có bao nhiêu cách để cập nhật tập kết quả?

Các phương pháp sau đây giúp bạn cập nhật tập kết quả

  • cập nhậtRow()
  • xóa hàng()
  • làm mới hàng()
  • hủyRowUpdates()
  • chèn Hàng()

46) Tại sao chúng ta nên đóng kết nối cơ sở dữ liệu trong Java?

Theo cách thực hành tốt nhất, chúng ta phải đóng resultset, câu lệnh và kết nối. Nếu kết nối đến từ một nhóm, khi đóng, kết nối sẽ được gửi trở lại nhóm để sử dụng lại. Chúng ta đang thực hiện điều này trong khối finally{}, vì nếu có bất kỳ ngoại lệ nào xảy ra, thì chúng ta vẫn có cơ hội đóng khối này.


47) Tại sao chúng ta sử dụng kiểu dữ liệu blob trong JDBC?

Chúng được sử dụng để lưu trữ một lượng lớn dữ liệu vào cơ sở dữ liệu như hình ảnh, phim, v.v.


48) Làm thế nào để thiết lập thuộc tính Concurrency trong ResultSet?

Có hai mức độ đồng thời

  1. CONCUR_READ_ONLY – Chỉ dùng để đọc.
  2. CONCUR_UPDATABLE − Dùng cho cả mục đích đọc và cập nhật.

49) Sự khác biệt giữa con trỏ cơ sở dữ liệu máy khách và máy chủ là gì?

Con trỏ phía máy chủ có nghĩa là dữ liệu và kết quả được lưu trên máy chủ. Chỉ khi dữ liệu được yêu cầu mới được gửi đến máy khách.

Con trỏ phía máy khách có nghĩa là tất cả dữ liệu được gửi đến vị trí máy khách.


50) Làm thế nào để chèn hình ảnh vào Cơ sở dữ liệu bằng JDBC?

Hình ảnh trong cơ sở dữ liệu sử dụng kiểu dữ liệu BLOB trong đó hình ảnh được lưu trữ dưới dạng luồng byte. Mã bên dưới hiển thị cách chèn hình ảnh vào DB.

Connection con = null;

PreparedStatement prs = null;

InputStream inputstrm = null;

Class.forName("oracle.jdbc.driver.OracleDriver");

con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:mydb","username","yourpassword");

//localhost is your machine or hostname

//1521 is your oracle database port number

//mydb is your oracle database name.

prs = con.prepareCall("insert into emp_profile values (?,?)");

prs.setInt(1, 1223);

inputstrm = new FileInputStream(new File("emp_img.jpg"));

prs.setBinaryStream(2, inputstrm);

int count = prs.executeUpdate();

Những câu hỏi phỏng vấn này cũng sẽ giúp ích cho bài thi viva(orals) của bạn

Chia sẻ

2 Comments

Bình luận

Chúng tôi sẽ không công khai email của bạn. Các ô đánh dấu * là bắt buộc *