填空题
JDBC,是一种用于执行SQL语句的Java API,为多种关系数据库提供统一访问。它由一组用Java语言编写的类和接口组成。
JDBC API:供程序员调用的接口与类,集成在java.sql和javax.sql包中。
简单地说,JDBC 可做三件事:连接数据库、发送操作数据库的语句、处理结果。
加载JDBC驱动是通过调用方法 Class.forName() 实现的。
JDBC中与数据库建立连接是通过调用 DriverManager类的静态方法 getConnection() 实现的。
有三种 Statement对象:Statement、PreparedStatement、CallableStatement(从PreparedStatement 继承)。
ResultSet 对象是executeQuery()方法的返回值,它被称为结果集,它代表符合SQL语句条件的所有行,并且它通过一套getXXX方法(这些get方法可以访问当前行中的不同列)提供了对这些行中数据的访问。
ResultSet对象自动维护指向当前数据行的游标。每调用一次next()方法,游标向下移动一行。
在JDBC中,事务操作成功后,系统将自动调用 commit() 提交,否则调用rollback()回滚。
在JDBC中,事务操作方法都位于接口java.sql.Connection中。可以通过调用setAutoCommit(false)来禁止自动提交。
JDBC中,事务开始的边界不是那么明显,它会开始于组成当前事务的所有SQL语句中的第一个被执行的时候
选择题
- 只要是通过 JDBC 进行数据库操作,都需要创建一个 Connection 对象来建立与数据库的连接,然后才能执行 CRUD(创建、读取、更新、删除)操作。Connection 对象是执行 SQL 语句和进行事务管理的基础
- 使用 Connection 对象的 prepareStatement()方法可以创建一个 PreparedStatement 接口的实例
- 实际上,Statement 的 executeUpdate()方法返回的是一个 int 类型的值,表示执行的 SQL 语句影响的行数,而不是一个布尔值。如果是执行插入、更新或删除操作,这个方法返回的是受影响的行数;如果是执行创建或删除表的操作,则返回 0
- 如果 JDBC 执行查询语句没有查询到数据,ResultSet 对象不会是 null,而是可以正常创建,但是它的第一条记录是空的,即调用 next()方法会返回 false。
ResultSet 对象的记录指针初始状态下并不指向第一条记录,而是在结果集之外。必须先调用 next()方法,如果返回 true,那么记录指针才会指向第一条记录。 - 在 JDBC 编程中,要获取 ResultSet 对象 rs 的第一列数据,可以使用列的索引(从 1 开始)或者列的名称
- SELECT COUNT(_) FROM emp;这条 SQL 语句是用来统计 emp 表中的记录数。即使表中没有任何数据,COUNT(_)也会返回一个数值,即 0,而不是 null。因此,ResultSet 中将会是有数据的,具体来说,它会包含一个值为 0 的单一数据行。
- PreparedStatement 可以执行带有问号占位符的预编译 SQL 语句,但它也可以执行其他类型的 SQL 语句,只要这些语句在创建 PreparedStatement 对象时被指定。问号占位符用于预编译时的参数化查询,以提高性能和安全性,但不是 PreparedStatement 唯一能执行的语句类型
- 在 PreparedStatement 中,参数是通过索引位置来设置的,索引从 1 开始。所以,要为第三个问号赋值,应该使用索引 3(因为索引是从 1 开始的)
判断题
- 正确。JDBC对Java程序员而言是接口模型,提供了一组操作数据库的接口;对实现与数据库连接的服务提供商而言是API,提供了实现这些接口的具体方法。
- 正确。这是JDBC访问数据库的标准步骤。
- 正确。ResultSet对象确实有记录指针,并且使用next()方法遍历结果集是常见的做法。
- 错误。循环完毕后,ResultSet对象的游标不会指回第一条记录,而是停留在结果集的末尾。
- 正确。关闭不再需要的Statement和Connection对象是一种好的编程实践,可以释放数据库资源。
- 错误。虽然ResultSet可能会在某些情况下自动关闭,但最佳实践是显式地关闭它,以确保资源被正确释放。
- 错误。关闭资源的顺序应该是先关闭ResultSet,然后是Statement,最后是Connection。这样做是因为Statement和ResultSet都依赖于Connection,一旦关闭了Connection,与之相关的Statement和ResultSet都会变得无效。
- 错误。在JDBC中,事务操作默认是自动提交的,除非调用了setAutoCommit(false)来禁用自动提交。
简答题
- 不同类型的JDBC驱动:
Type 1: 完全用本地语言编写的驱动,通常称为JDBC-ODBC桥。它使用ODBC API来与数据库进行通信。
Type 2: 部分用本地语言编写,驱动本身充当JDBC和数据库之间的中间层。
Type 3: 纯Java驱动,使用本地协议直接与数据库进行通信。
Type 4: 纯Java驱动,通过网络协议与数据库进行通信。
- JDBC的操作步骤:
加载JDBC驱动。
创建数据库连接(Connection对象)。
创建Statement或PreparedStatement对象。
执行SQL语句。
获取并处理结果(ResultSet)。
关闭所有资源(ResultSet、Statement、Connection)。
- execute, executeQuery, executeUpdate的区别:
executeQuery: 用于执行返回数据集的查询语句,返回ResultSet对象。
executeUpdate: 用于执行插入、更新或删除操作的SQL语句,返回受影响的行数。
execute: 可以执行任何类型的SQL语句,返回一个boolean值,如果第一个结果是一个ResultSet对象,则返回true,否则返回false。它还可以返回一个ResultSet对象或更新计数。
- JDBC的ResultSet:
ResultSet是JDBC API中的一个接口,代表从数据库执行查询操作后返回的数据集。
它提供了一种方式来逐行遍历查询结果。
ResultSet通常通过executeQuery方法获得,它包含了查询结果集中的数据。
- 相对于Statement,PreparedStatement的优点:
性能:PreparedStatement支持预编译,可以提高执行效率,特别是对于频繁执行的相同SQL语句。
安全性:PreparedStatement可以有效防止SQL注入攻击,因为它使用参数化查询。
灵活性:可以通过设置不同的参数值来重复使用同一个PreparedStatement对象。
- JDBC的事务管理:
定义:事务是一组原子性的SQL操作,要么全部成功,要么全部失败。
为什么需要:事务提供了数据的完整性和一致性。在执行一系列数据库操作时,如果其中任何一个操作失败,事务可以回滚到操作之前的状态,确保数据不会处于不一致的状态。
操作:通常包括commit(提交事务)和rollback(回滚事务)。可以通过Connection对象的setAutoCommit方法来控制事务的自动提交行为。
评论 (0)