50 个最热门的 JDBC 面试问题及答案(2025 年)

以下是 Java 数据库连接 (JDBC) 面试问题和答案,可帮助应届毕业生和有经验的应聘者获得理想的工作。

免费 PDF 下载:JDBC 面试题


1)什么是JDBC?

JDBC 代表 Java 数据库连接。JDBC 是一种与数据库通信并执行 SQL 查询的 Java API。


2)什么是JDBC驱动程序,有多少种JDBC驱动程序可用?

JDBC驱动程序包含帮助Java应用程序和数据库的类和接口。

JDBC 驱动程序有 4 种类型。

  1. 类型 1 驱动程序或 JDBC-ODBC 桥驱动程序。
  2. 2 型驱动程序或 Native-API,部分是 Java 驱动程序。
  3. 类型 3 驱动程序或网络协议、纯 Java 驱动程序。
  4. 类型 4 驱动程序或 Native 协议、纯 Java 驱动程序。

3)如何连接 MySQL 或者使用 Java 的 Oracle?

//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; }

代码说明

Class.forName 创建 JDBC 驱动程序的实例并向 DriverManager 注册。

getConnection() 方法总是建立与数据库的连接。

我们需要从上述连接对象创建一个 Statement 对象。该语句将返回结果集对象。ResultSet.next() 表示如果结果集仍然返回一行。


4)哪个 JDBC 驱动程序是最快的驱动程序?

类型 4 驱动程序或 Native 协议、纯 Java 驱动程序是最快的驱动程序。


5)JDBC API 组件有哪些?

有四种类型的组件

  1. 数据库接口
  2. JDBC 驱动程序管理器
  3. JDBC 测试套件
  4. JDBC-ODBC 桥
JDBC面试题
JDBC面试题

6)什么是JDBC语句?

JDBC 语句有 3 种类型,如下所示:

  1. 个人陈述:它将执行 SQL 针对数据库进行查询(静态 SQL 查询)。
  2. 准备好的声明: 当我们想要重复执行 SQL 语句时使用。输入数据是动态的,并在运行时输入。
  3. 可调用语句: 当我们想要执行存储过程时使用。

7)如何执行存储过程?

可以使用 JDBCcallable 语句执行存储过程。以下是代码。

Connection conn = null;

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

callStmt.setString(1, "abcdefg");


8)在 Java 中使用 PreparedStatement 有哪些优点?

预处理语句用于重复执行相同的 SQL 语句。即使预处理语句使用了“n”次,也只会编译一次


9)什么是 ResultSet?

java.sql.ResultSet 接口表示 SQL 查询的结果集。它表示一个游标指向表中的一行;它指向第一行之前。


10)ResultSet 有哪些类型?

有三种类型的 ResultSet 可用。如果我们不声明任何 ResultSet,则意味着我们正在调用 TYPE_FORWARD_ONLY

  1. TYPE_FORWARD_ONLY:光标只能向前移动。
  2. TYPE_SCROLL_INSENSITIVE:光标可以前后移动,但不敏感。
  3. TYPE_SCROLL_SENSITIVE:光标可以向前和向后移动,但它是敏感的

11) 解释 JDBC 中 RowSet 和 ResultSet 之间的区别?

在 ResultSet 处理与 DB 的连接中,我们不能将 Result 作为序列化对象。

由于上述问题,我们无法通过网络传递结果集。

RowSet 扩展了 ResultSet 接口,因此它拥有 ResultSet 中的所有方法。RowSet 是序列化的。

因此,我们可以将 Rowset 从一个类传递到另一个类,因为它与数据库没有任何连接。


12)为什么要在 JDBC 中使用 setAutoCommit(false)?

如果您想关闭自动提交,请设置 connection.setAutoCommit(false)


13)JDBC 中的数据库警告是什么,以及我们如何处理 JDBC 中的数据库警告?

SQL 警告或数据库警告是 SQLException 类的子类。我们可以通过在 Connection、Statement 和 ResultSet 上使用 getWarnings() 方法来处理它


14) 我可以得到一个空的 ResultSet 吗?

不,我们不能得到 null Resultset。如果下一个记录不包含行,则 ResultSet.next() 可以返回 null。


15)元数据是什么意思?我们为什么要使用它?

元数据是指有关其他数据的数据或信息。我们使用元数据来获取数据库产品版本、驱动程序名称、表和视图的总数。


16)JDBC 中的execute、executeQuery、executeUpdate 有什么区别?

execute():它可以用于任何类型的 SQL 查询。

executeQuery() :可用于选择查询。

executeUpdate():它可用于更改/更新表。


17) 什么是数据库连接池? 使用连接池的优点是什么?

连接池意味着连接将存储在缓存中,我们将来可以重复使用它们。

优势:

  1. 快一点
  2. 连接池使诊断和分析数据库连接变得更加容易。

18)DriverManager类的作用是什么?

它是用户和驱动程序之间的接口。DriverManager 跟踪数据库和相应驱动程序之间的所有活动。


19)批量更新是什么意思?

批量更新意味着一次执行一组/一组 SQL 查询。

批量更新只能用于插入、更新和删除,不能用于选择查询。


20)JDBC API 中有多少个可用的包?

JDBC API 中有两种类型的包

  1. java.sql
  2. javax.sql

21)execute、executeQuery 和 executeUpdate 的返回类型是什么?

执行的返回类型是布尔值

executeQuery 的返回类型是 ResultSet 对象

executeUpdate 的返回类型是 int


22)结果集的索引以 0 还是 1 开始?

结果集的索引从 1 开始。


23)加载驱动时Class.forName起什么作用?

Class.forName 创建 JDBC 驱动程序的实例并向 DriverManager 注册。


24) JDBC-ODBC Bridge 是多线程的吗?

不,JDBC-ODBC Bridge 使用同步方法来序列化对 ODBC 的所有调用。


25)哪个接口处理 JDBC 中的事务管理?

连接接口处理 JDBC 中的事务管理。它提供了 commit()、rollback() 等方法。


26)为什么会出现“没有合适的驱动程序”错误?

当我们调用 DriverManager.getConnection 方法时,会出现“没有合适的驱动程序”的情况,

可能由于以下原因而发生:

  • 在调用 getConnection 方法之前无法加载准确的 JDBC 驱动程序。
  • 这可能是无效的或者错误的 JDBC URL。

27)准备好的语句更快。为什么?

准备好的语句执行比直接执行更快,因为语句只编译一次。准备好的语句和 JDBC 驱动程序在执行期间相互连接,没有连接开销。


28) 是否可以连接到多个数据库?使用单个语句,我们可以从两个、三个或多个数据库中更新或提取数据吗?

是的,可以同时连接多个数据库,但这取决于具体的驱动程序。

要从不同的数据库更新和提取数据,我们可以使用单个语句。但我们需要中间件来处理多个数据库或单个数据库。


29) 告诉我 setMaxRows(int) 和 SetFetchSize(int) 之间的区别?

设置最大行数(int) 设置FetchSize(int)?
定义结果集一次可以包含多少行 定义将从数据库读取的行数。

30)请告诉我有关特殊字符的信息?

特殊字符前面有一个转义符。示例 –

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

31)数据库中“脏读”是什么意思?

脏读意味着“读取的值可能正确,也可能不正确”。


32)两阶段提交是什么意思?

分布式事务处理中使用两阶段提交。如果任何事务正在执行,它将影响多个数据库。将使用两阶段提交使所有数据库彼此同步。


33)JDBC 中有多少种锁定系统?

JDBC 中有两种类型的锁定,通过它们我们可以处理多个用户。

如果两个用户正在查看同一条记录,则无需锁定。如果一个用户正在更新一条记录,而另一个用户也在更新同一条记录,则需要使用锁定。

  1. 乐观锁定:只有当我们要“更新”时,它才会锁定记录。
  2. 悲观锁:将锁定记录从“选择”到查看、更新和提交的时间。

34)JDBC 中的异常有哪些?

JDBC中有四种类型的异常。

  1. batchUpdate 异常
  2. 数据截断
  3. SQL 异常
  4. SQL警告

35)给出使用 JDBC 连接数据库的步骤?

使用 JDBC 连接数据库有两种方法

  1. 使用 DriverManager:

它将借助 class.forName(driver class) 和 Class.forName() 加载驱动程序类。

加载后它将把控制权传递给 DriverManager。

DriverManager.getConnection() 将创建访问数据库的连接。

  1. 使用数据源:

对于数据源,无需使用 DriverManager,只需借助 JNDI 即可。它会从命名服务服务器中查找数据源。DataSource.getConnection() 方法会将 Connection 对象返回给数据库。


36)解释 JDBC 架构?

JDBC API 支持数据库的2层和3层模型。

在 2 层模型中,Java 应用程序与数据源交互

JDBC 两层架构

在 3 层模型中,命令被重定向到“中间层”服务。之后,命令被发送到数据源。

JDBC 两层架构


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

新功能是

  • JDBC 驱动类自动加载
  • 增强的连接管理
  • RowId SQL 已启用
  • SQL使用注解实现的数据集
  • SQL 异常处理的增强
  • 支持 SQL XML

38) JDBC 中使用了哪些包?

JDBC 中使用了 8 个包 –

  1. sql.驱动程序
  2. 连接升级包
  3. 个人陈述
  4. 准备声明
  5. 可调用语句
  6. 结果集
  7. 结果集元数据
  8. 数据库元数据

39)JDBC 中有多少个 RowSet?

有两种类型的行集可用:

  1. 保持联系 – 连接的 RowSet 对象立即连接到数据库。如果应用程序终止,则连接的 RowSet 对象也会终止。
  2. 断线 – 断开连接的 RowSet 对象在执行所需查询后连接到数据库。

40)连接的含义是什么?

连接接口由与数据库交互的方法组成。


41)解释 JDBC 保存点?

保存点表示当前事务可以回滚到的点。它可以选择只回滚部分更改,而不是回滚所有更改。


42)列出使用DataSource的优点?

数据源正在管理员和程序员/开发人员之间分工。

管理员创建一个 DataSource 对象并将其与 JNDI 注册表绑定。程序员/开发人员从注册表中检索该 DataSource 对象。然后,它将与数据库建立连接。


43)为什么我们需要一个像 ResultSet 那样的包装器 JdbcRowSet?

我们可以将 ResultSet 对象用作 JavaBeans 组件。

  • JdbcRowSet 也可用作 JavaBeans 组件。因此,它可以在设计或编译时创建和配置,并在运行时执行。
  • 所有 jdbcRowSet 对象都是可滚动和可更新的。

44) 我们可以通过多少种方式查看结果集?

查看ResultSet的方法有2种

  1. 列索引。

示例: getInt(String 列名称)、getInt(int 列索引)


45)有多少种方法可以更新结果集?

以下方法可帮助您更新结果集

  • 更新行()
  • 删除行()
  • 刷新行()
  • 取消行更新()
  • 插入行()

46)为什么我们应该在 Java 中关闭数据库连接?

作为最佳实践,我们必须关闭结果集、语句和连接。如果连接来自池,则在关闭时,连接将被发送回池以供重用。我们在 finally{} 块中执行此操作,因为如果发生任何异常,我们仍然有机会关闭它。


47)为什么我们在 JDBC 中使用 blob 数据类型?

这些用于将大量数据存储到数据库中,如图像、电影等。


48)如何设置ResultSet的Concurrency属性?

有两种并发级别

  1. CONCUR_READ_ONLY – 仅用于读取。
  2. CONCUR_UPDATABLE-用于读取和更新。

49) 客户端和服务器数据库游标有什么区别?

服务器端游标意味着数据和结果保存在服务器上。只有当请求的数据被发送到客户端时。

客户端游标是指所有发送到客户端位置的数据。


50) 如何使用 JDBC 将图像插入数据库?

数据库中的图像使用 BLOB 数据类型,其中图像存储为字节流。以下代码显示如何将图像插入数据库。

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();

这些面试问题也会对你的口试有帮助

分享

2条评论

  1. 头像 贾纳维 说:

    对学生非常有用………..

发表评论

您的电邮地址不会被公开。 必填项 *