思维导图:
11.3 JDBC编程
简介
- 定义:JDBC(Java Database Connectivity)是Java用于数据库连接的一个API,允许执行SQL语句,从而进行数据查询和更新。
- 目的:本节旨在详细介绍如何使用JDBC API实现数据库的基本操作,并提供代码示例以帮助理解。
- 导入Jar包
11.3.1 JDBC编程步骤
-
加载并注册数据库驱动
- 代码示例:
Class.forName("com.mysql.cj.jdbc.Driver");
- 解释:这一步是为了让JVM加载并注册JDBC驱动程序,使得程序能够知道如何连接数据库。
- 代码示例:
-
获取数据库连接
- 代码示例:
String url = "jdbc:mysql://hostname:port/dbname"; Connection conn = DriverManager.getConnection(url, "username", "password");
- 解释:通过DriverManager获取数据库连接,
url
指定了数据库的位置,username
和password
提供了所需的认证信息。
- 代码示例:
-
创建Statement对象
- 代码示例:
Statement stmt = conn.createStatement();
- 解释:创建一个Statement对象来执行SQL语句。根据需要,也可以创建PreparedStatement或CallableStatement对象。
- 代码示例:
-
执行SQL语句
- 代码示例:
ResultSet rs = stmt.executeQuery("SELECT * FROM tablename");
- 解释:执行SQL查询并返回结果集。对于更新操作,可以使用
executeUpdate()
方法。
- 代码示例:
-
处理结果集
- 代码示例:
while(rs.next()){ System.out.println(rs.getString("columnname")); }
- 解释:遍历查询结果,并对每一行记录进行处理。此处仅输出了一列的值。
- 代码示例:
-
关闭连接并释放资源
- 代码示例:
rs.close(); stmt.close(); conn.close();
- 解释:关闭所有资源以避免资源泄露。应确保这些在finally块中执行,即使出现异常也能关闭。
- 代码示例:
11.3.2 实现第一个JDBC程序
- 准备工作:确保数据库环境搭建正确,包括安装数据库、创建表和添加数据。
- 导入JDBC驱动:确保JDBC驱动的JAR文件被添加到项目中。
- 详细步骤:以上提供的每一步骤都配有代码示例,可按需修改以适应实际数据库和表。
错误处理和资源管理
- 在实际开发中,适当的错误处理和资源管理非常关键。以下是改进后的资源管理示例:
try { //... 创建和使用资源 ... } catch(SQLException e) { e.printStackTrace(); // 或者更详细的错误处理 } finally { try { if(rs != null) rs.close(); if(stmt != null) stmt.close(); if(conn != null) conn.close(); } catch(SQLException e) { e.printStackTrace(); } }
总结:
重点:
- 驱动加载:理解如何加载并注册数据库驱动程序,这是所有JDBC操作的起点。
- 获取连接:掌握如何使用
DriverManager
获取数据库连接,包括URL格式和认证信息的提供。 - 创建Statement:了解不同类型的Statement(如
Statement
,PreparedStatement
,CallableStatement
)及其用途和创建方法。 - 执行SQL语句:熟悉如何使用Statement对象执行SQL语句,并区分
executeQuery
、executeUpdate
等方法的使用场景。 - 结果集处理:掌握如何遍历
ResultSet
对象处理查询结果,包括获取各种类型的列数据。 - 资源管理:了解如何正确关闭数据库连接和相关资源,以避免资源泄露。
难点:
- 驱动兼容性:理解不同数据库和驱动版本之间的兼容性问题,知道如何选择合适的驱动。
- 错误处理:掌握如何处理SQL异常和正确执行资源清理,尤其是在异常情况下保证资源被释放。
- SQL注入防御:了解使用PreparedStatement来预防SQL注入攻击的重要性及其实现方式。
易错点:
- 忽视驱动加载:有时可能忽略了加载数据库驱动的步骤,这将导致连接数据库时失败。
- 连接字符串错误:在构建连接字符串时,易于出错,如语法错误、端口号错误、数据库名拼写错误等。
- 资源未正确关闭:在finally块中不正确关闭资源,或完全忽视关闭操作,会导致资源泄露。
- 异常处理不当:未妥善处理SQLException,或在捕获异常后未进行适当的错误记录和资源清理。
- SQL注入漏洞:使用Statement执行拼接的SQL语句,而不是使用PreparedStatement,可能导致SQL注入风险。