Java 中关于 JDBC 的选择题

2025 年 3 月 29 日 | 阅读 12 分钟

JDBC 是一个 API(应用程序编程接口),它帮助程序员编写 Java 程序来连接数据库、从数据库检索数据以及在Java 程序中执行各种数据操作。由于它是重要的主题,因此在 Java 面试和竞争性考试中经常会遇到与 JDBC 相关的问题。因此,在本节中,我们收集了一些基于 JDBC 的选择题,这些题目对于各种竞争性考试和面试都非常重要。

1) JDBC 的主要组成部分有哪些?

  1. DriverManager, Driver, Connection, Statement, and ResultSet
  2. DriverManager, Driver, Connection, and Statement
  3. DriverManager, Statement, and ResultSet
  4. DriverManager, Connection, Statement, and ResultSet

答案:a

说明

  • DriverManager: 管理数据库驱动程序的列表。
  • Driver: 数据库通信链接,负责所有与数据库的通信。
  • Connection: 包含与数据库通信的所有方法的接口。
  • Statement: 封装一个 SQL 语句,该语句被传递给数据库进行解析、编译、规划和执行。
  • ResultSet: ResultSet 代表查询执行后检索到的一组行。

2) 选择定义了 JDBC 类的包?

  1. jdbc 和 javax.jdbc
  2. rdb 和 javax.rdb
  3. jdbc 和 java.jdbc.sql
  4. sql 和 javax.sql

答案:d

解释: JDBC API 分为两个包,即 java.sql 和 javax.sql。我们需要导入这些包才能在我们的应用程序中使用类和接口。


3) Thin driver 也被称为?

  1. Type 3 Driver
  2. Type-2 Driver
  3. Type-4 Driver
  4. Type-1 Driver

答案:c

解释: JDBC Thin Driver 是一个纯 Java 驱动程序。它也称为 Type-4 Driver。它是平台无关的,因此不需要客户端的任何其他 Oracle 软件。它使用 SQL*Net 与服务器通信以访问 Oracle 数据库。


4) 创建数据库连接的正确顺序是什么?

i. 导入 JDBC 包。

ii. 打开与数据库的连接。

iii. 加载并注册 JDBC 驱动程序。

iv. 执行 Statement 对象并返回查询的 Resultset。

v. 创建一个 Statement 对象来执行查询。

vi. 关闭 Resultset 和 Statement 对象。

vii. 处理 Resultset。

viii. 关闭连接。

  1. i, ii, iii, v, iv, vii, viii, vi
  2. i, iii, ii, v, iv, vii, vi, viii
  3. ii, i, iii, iv, viii, vii, v, vi
  4. i, iii, ii, iv, v, vi, vii, viii

答案:b

解释: 要在 Java 中创建数据库连接,我们必须遵循以下顺序

  1. 导入 JDBC 包。
  2. 加载并注册 JDBC 驱动程序。
  3. 打开与数据库的连接。
  4. 创建一个 Statement 对象来执行查询。
  5. 执行 Statement 对象并返回查询的 Resultset。
  6. 处理 Resultset。
  7. 关闭 Resultset 和 Statement 对象。
  8. 关闭连接。

5) 下列哪个方法用于执行 JDBC 中的 DML 语句?

  1. executeResult()
  2. executeQuery()
  3. executeUpdate()
  4. execute()

答案:c

解释: 我们使用 executeUpdate() 方法来执行 DML SQL 查询,这些查询会更改数据库中的数据,例如 INSERT、UPDATE 和 DELETE,它们不返回 Resultset。


6) JDBC 通过 Connection 接口提供多少个事务隔离级别?

  1. 3
  2. 4
  3. 7
  4. 2

答案:b

解释: 下表定义了事务隔离级别。

事务隔离级别描述
TRANSACTION_READ_UNCOMMITTED可能发生脏读、不可重复读和幻读。
TRANSACTION_READ_COMMITTED防止脏读;可能发生不可重复读和幻读。
TRANSACTION_REPEATABLE_READ防止脏读和不可重复读;可能发生幻读。
TRANSACTION_SERIALIZABLE防止脏读、不可重复读和幻读。

7) JDBC API 中哪个方法是静态且同步的?

  1. getConnection()
  2. prepareCall()
  3. executeUpdate()
  4. executeQuery()

答案: A

解释: 使用 JDBC API 的 Java 应用程序通过获取 Connection 对象来建立与数据库的连接。获取 Connection 对象的标准方法是调用 DriverManager.getConnection() 方法,该方法接受一个包含数据库连接 URL 的字符串。它是一个静态且同步的方法。


8) 加载数据库驱动程序需要哪些方法?

  1. getConnection()
  2. registerDriver()
  3. forName()
  4. b 和 c 都是

答案:d

解释: 加载数据库驱动程序有两种方法

  • 使用 registerDriver() 方法: 要通过 Java 应用程序访问数据库,我们必须在程序中注册已安装的驱动程序。我们可以使用 DriverManager 类中的 registerDriver() 方法来实现。registerDriver() 方法接收一个驱动程序类作为输入,即实现 java.sql.Driver 接口的类,例如 OracleDriver。
  • 使用 Class.forName() 方法: 或者,我们也可以使用 java.lang.Class 的 forName() 方法直接加载 JDBC 驱动程序。但是,此方法仅对符合 JDK 标准的 Java 虚拟机有效。它对 Microsoft JVM 无效。

9) 参数化查询可以通过什么来执行?

  1. ParameterizedStatement
  2. 预处理语句
  3. CallableStatement and Parameterized Statement
  4. All kinds of Statements

答案:b

解释: PreparedStatement 接口扩展了 Statement 接口。它表示一个预编译的 SQL 语句,可以执行多次。它接受参数化的 SQL 查询。我们可以将 0 个或多个参数传递给此查询。


10) 下列哪个不是 JDBC 中的有效语句?

  1. 语句
  2. 预处理语句
  3. QueryStatement
  4. 可调用语句

答案:c

说明

  • Statement: 用于与数据库进行通用访问。在我们使用运行时静态 SQL 语句时很有用。Statement 接口不能接受参数。
  • PreparedStatement: 表示可以多次执行的预编译 SQL 语句。
  • CallableStatement: 用于执行 SQL 存储过程。
  • QueryStatement: JDBC 不支持。

11) 在 JDBC Connection 类中,哪个隔离级别可以防止脏读?

  1. TRANSACTION_READABLE_READ
  2. TRANSACTION_READ_COMMITTED
  3. TRANSACTION_READ_UNCOMMITTED
  4. TRANSACTION_NONE

答案:b

解释: 隔离级别 TRANSACTION_READ_COMMITTED 可以防止脏读,但仍可能发生不可重复读和幻读。


12) setAutoCommit(false) 的作用是什么?

  1. 它不会在每个查询后自动提交事务。
  2. 它显式提交事务。
  3. 它从不提交事务。
  4. 它不会在每个查询后自动提交事务。

答案:b

解释: 允许将两个或多个语句分组到事务中的方法是禁用自动提交模式。禁用自动提交模式后,直到我们显式调用 commit() 方法,才提交 SQL 语句。


13) 可以使用哪个来调用存储过程?

  1. 可调用语句
  2. 语句
  3. CalledStatement
  4. 预处理语句

答案:b

解释: 存储过程是数据库程序,可用于对表执行 CRUD 操作。我们可以使用 Statement Interface 调用这些过程。它提供了与数据库执行查询的方法。


14) 关闭数据库资源的正确顺序是什么?

  1. Connection, Statements, and then ResultSet
  2. ResultSet, Connection, and then Statements
  3. Statements, ResultSet, and then Connection
  4. ResultSet, Statements, and then Connection

答案:d

解释: JDBC 连接和语句的黄金法则是按与初始化或打开相反的顺序关闭。此外,ResultSet 依赖于 Statement 的执行,而 Statement 依赖于 Connection 实例。因此,关闭顺序应为(ResultSet、Statement,然后是 Connection)。


15) 调试 JDBC 相关问题的最佳方法是启用什么?

  1. JDBC 追踪
  2. 异常处理
  3. a 和 b 都是
  4. Only b

答案:a

解释: JDBC 驱动程序支持 DriverManager 和 DataSource 追踪,如 JDBC 3.0 API 规范中所述。跟踪信息包括 JDBC API 方法的入口和出口点以及相应的参数和返回值。DriverManager.setLogWriter 方法可用于将跟踪消息发送到 PrintWriter。跟踪输出包含 JDBC 活动的详细列表。


16) 哪个 JDBC 驱动程序可以同时用于 servlet 和 applet?

  1. Type 3
  2. Type 4
  3. Type 3 and Type 2
  4. Type 3 and Type 4

答案:d

解释: Type 3 驱动程序遵循用于访问数据库的三层方法。JDBC 客户端使用标准网络套接字与中间件应用程序服务器通信。在 Type 4 驱动程序中,基于纯 Java 的驱动程序通过套接字连接直接与供应商的数据库通信。


17) JDBC-ODBC 驱动程序也称为?

  1. Type 4
  2. Type 3
  3. 类型 1
  4. 类型 2

答案:c

解释: Type 1 驱动程序也称为 JDBC-ODBC 桥驱动程序。它是一种数据库驱动程序实现,它利用 ODBC 驱动程序连接到数据库。该驱动程序将 JDBC 方法调用转换为 ODBC 函数调用。


18) 下列哪个驱动程序速度最快?

  1. JDBC-ODBC Bridge Driver
  2. Native API Partly Java Driver
  3. Network Protocol 驱动程序
  4. JDBC Net Pure Java Driver

答案:d

解释: JDBC Net 纯 Java 驱动程序(Type 4)是最快的驱动程序,因为它将 JDBC 调用转换为特定于供应商的协议调用,并直接与数据库交互。


19) 下列哪个不是 ResultSet 对象的一种类型?

  1. TYPE_FORWARD_ONLY
  2. CONCUR_WRITE_ONLY
  3. TYPE_SCROLL_INSENSITIVE
  4. TYPE_SCROLL_SENSITIVE

答案:b

解释: ResultSet 对象有三种类型

  • TYPE_FORWARD_ONLY: 这是默认类型,光标只能在结果集中向前移动。
  • TYPE_SCROLL_INSENSITIVE: 光标可以向前和向后移动,并且结果集对创建结果集后其他人对数据库所做的更改不敏感。
  • TYPE_SCROLL_SENSITIVE: 光标可以向前和向后移动,并且结果集对创建结果集后其他人对数据库所做的更改敏感。

根据并发性,ResultSet 对象有两种类型。

  • CONCUR_READ_ONLY: ResultSet 是只读的,这是默认的并发类型。
  • CONCUR_UPDATABLE: 我们可以使用 ResultSet update 方法来更新行数据。

20) 什么是 JDBC Savepoint?

  1. 事务中的中间点或检查点
  2. 可以存储查询的点
  3. JDBC 应用程序开始执行的点
  4. 可以存储事务的内存

答案:a

解释: JDBC Savepoint 帮助我们在事务中创建检查点,我们可以回滚到该特定检查点。


21) Java 程序员在使用 JDBC 编程时使用多少个阶段?

  1. 3
  2. 2
  3. 5
  4. 6

答案:d

解释: JDBC 程序包含以下阶段

  • 注册驱动程序
  • 连接到数据库
  • 在 Java 中准备 SQL 语句
  • 在数据库上执行 SQL 语句
  • 检索结果
  • 关闭连接

22) 下列哪个是注册 JdbcOdbcDriver 的正确方法?

  1. jdbc.odbc.JdbcOdbcDriver obj = new sun.jdbc.odbc.JdbcOdbcDriver();
  2. odbc.JdbcOdbcDriver obj = new sun.odbc.JdbcOdbcDriver();
  3. jdbc.JdbcOdbcDriver obj = new sun.jdbc.JdbcOdbcDriver();
  4. jdbc.odbc.JdbcOdbc obj = new sun.jdbc.odbc.JdbcOdbc();

答案:a

解释: 通过创建驱动程序软件的驱动程序类的对象,我们可以注册驱动程序。要注册 sun microsystems 的 JdbcOdbcDriver,我们可以创建 JdbcOdbcDriver 驱动程序类的对象,如下所示

sun.jdbc.odbc.JdbcOdbcDriver obj = new sun.jdbc.odbc.JdbcOdbcDriver();

23) 有多少种注册驱动程序的方式?

  1. 2
  2. 3
  3. 4
  4. 5

答案:c

解释: 有四种注册驱动程序的方式

1. 通过创建 Driver 的对象。例如

sun.jdbc.odbc.JdbcOdbcDriver obj = new sun.jdbc.odbc.JdbcOdbcDriver();

2. 将驱动程序类对象发送到 DriverManager 类的 registerDriver() 方法。例如

DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());

3. 将驱动程序类名直接发送到 forName()。例如

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

4. 使用 System 类的 getProperty() 方法。例如

String dname = System.getProperty("driver");
Class.forName(dname);

如果使用上述方法注册驱动程序,则必须在运行程序时指定驱动程序的名称。getProperty() 方法接收驱动程序名称并将驱动程序名称存储在 dname 中。

我们使用以下命令在运行时提供驱动程序名称

c:\> java -Ddriver = driverclassname Programname

例如

c:\> java -Ddriver = sun.jdbc.odbc.JdbcOdbcDriver MyProgram

24) 在以下语句中识别 DSN

  1. jdbc
  2. odbc
  3. scott
  4. oradsn

答案:d

解释: 数据源名称 (DSN) 是分配给数据库的名称,用于在 Java 程序中标识它。DSN 与数据库的实际位置相关联。


25) 如果我们要使用 Oracle Corp. 提供的 thin driver 连接 Oracle 数据库,哪个语句是正确的?

  1. getConnection("jdbc::thin@localhost:1521:oracle", "scott", "tiger");
  2. getConnection("jdbc:thin@localhost:1521:oracle", "scott", "tiger");
  3. getConnection("jdbc::thin@localhost:1522:oracle", "scott", "tiger");
  4. getConnection("jdbc::oracle@localhost:1521:thin", "scott", "tiger");

答案:a

解释: 我们使用以下语句通过 thin 驱动程序连接 Oracle 数据库。

DriverManager.getConnection("jdbc::thin@localhost:1521:oracle", "scott", "tiger");

26) ResultSet 有哪些类型?

  1. Forward ResultSet
  2. Scrollable ResultSet
  3. Only a
  4. a 和 b 都是

答案:d

解释: JDBC 仅提供两种类型的 ResultSet:Forward 和 Scrollable ResultSet。


27) 下列语句中的 blob 是什么意思?

  1. 变量
  2. Object
  3. 数据类型
  4. 关键字

答案:c

解释: SQL 提供 BLOB(二进制大对象)数据类型来将 .gif 或 .jpg 或 jpeg 等图像文件存储到数据库表中。


28) 用于将文件存储到数据库表的哪个数据类型?

  1. BLOB
  2. CLOB
  3. 文件
  4. a 和 b 都是

答案:b

解释: 要将大量数据(例如文本文件)存储到表中,我们使用 SQL 的 CLOB(字符大对象)数据类型。


29) DatabaseMetaData 接口用于获取什么?

  1. 关于整个数据库的全面信息。
  2. 关于整个表的全面信息。
  3. 关于整个列的全面信息。
  4. b 和 c 都是

答案:a

解释: DatabaseMetaData 是一个接口,用于获取关于整个数据库的全面信息。它由驱动程序供应商实现,以便让用户了解 DBMS 与其配合使用的 JDBC 驱动程序的兼容性。


30) 下列哪个驱动程序将 JDBC 调用转换为特定于数据库的调用?

  1. JDBC-ODBC Bridge Driver (Type 1)
  2. Native API-partly Java Driver (Type 2)
  3. Net Protocol-pure Java Driver (Type 3)
  4. Native Protocol-pure Java Driver (Type 4)

答案:b

解释: Type 2 驱动程序借助供应商的数据库库将 JDBC 调用转换为特定于数据库的调用。它直接与数据库服务器通信。


31) ResultSet 是否可更新?

  1. 是的,但仅当我们对 ResultSet 调用 openCursor() 方法并且驱动程序和数据库支持此选项时。
  2. 是的,但仅当我们执行语句时指明了并发策略,并且驱动程序和数据库支持此选项时。
  3. 是的,但仅当 ResultSet 是 UpdateableResultSet 类的对象并且驱动程序和数据库支持此选项时。
  4. 否,ResultSet 永远不可更新。我们必须显式执行 DML 语句来更改底层数据库中的数据。

答案:b

解释: 默认情况下,ResultSet 对象不可更新,并且其光标仅向前移动。如果我们想创建一个可更新的 ResultSet 对象,我们可以使用 ResultSet.TYPE_SCROLL_INSENSITIVE 或 ResultSet.TYPE_SCROLL_SENSITIVE 类型,它们允许光标相对于当前位置向前和向后移动。


32) 下列哪个接口提供了 commit() 和 rollback() 方法?

  1. Statement Interface
  2. ResultSet Interface
  3. Connection Interface
  4. RowSet 接口

答案:c

解释: Connection 接口提供了 commit() 和 rollback() 方法。commit() 方法使自上一个 commit/rollback 以来所做的所有更改永久化,并释放此 Connection 对象当前持有的任何数据库锁。rollback() 方法撤消当前事务中所做的所有更改,并释放此 Connection 对象当前持有的任何数据库锁。


33) 使用一个 Connection 可以创建多少个 Statement 对象?

  1. 2
  2. 1
  3. 3
  4. 多次

答案:d

解释: 可以在同一个连接上创建和使用多个语句,但每个语句一次只能创建一个 Resultset 并使用。


34) JDBC API 支持____________ 和 __________ 架构模型来访问数据库。

  1. Two-tier
  2. Three-tier
  3. a 和 b 都是
  4. Only b

答案:c

解释: JDBC API 支持双层和三层处理模型来进行数据库访问。在双层模型中,Java 应用程序直接与数据源通信。在三层模型中,命令被发送到“中间层”服务,然后这些服务将命令发送到数据源。


35) 关于事务,以下哪个(些)陈述是正确的?

i. 事务是由一个或多个 SQL 语句组成的一个逻辑工作单元。

ii. 事务以提交或回滚结束,具体取决于是否存在数据一致性或数据并发性问题。

iii. 锁是一种机制,允许两个事务同时操作相同的数据。

iv. 为了避免事务期间的冲突,DBMS 使用锁,即阻止其他人访问事务正在访问的数据的机制。

  1. Only i and ii
  2. Only i and iii
  3. Only i, ii, and iv
  4. 以上全部

答案:c

解释: 陈述 i、ii 和 iv 关于事务是正确的,但陈述 iii 不正确,因为锁机制阻止两个事务同时操作相同的数据。