【JAVA 笔记】12 带有数据库文件的完整的JDBC访问例子,命令行界面
【JAVA 笔记】12 带有数据库文件的完整的JDBC访问例子,命令行界面
代码结构解析
1. 导入必要的包
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.PreparedStatement;
import java.util.Scanner; // 导入Scanner类用于接收用户输入
2. 数据库连接类 DBConnection
class DBConnection {
// 数据库连接相关配置
String driver = "com.mysql.cj.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/book?useUnicode=true&characterEncoding=UTF8&serverTimezone=GMT%2B8";
String user = "root";
String password = "123456";
Connection coon = null;
// 构造函数,初始化数据库连接
public DBConnection() {
try {
// 加载数据库驱动
Class.forName(driver);
// 建立数据库连接
coon = (Connection) DriverManager.getConnection(url, user, password);
if (!coon.isClosed()) {
System.out.println("成功连接到数据库!");
}
} catch (Exception e) {
e.printStackTrace();
}
}
// 关闭数据库连接的方法
public void close() {
try {
this.coon.close();
System.out.println("数据库连接已关闭");
} catch (Exception e) {
e.printStackTrace();
}
}
// 添加记录的方法
public void add(String name, int age, String gender) {
String sql = "INSERT INTO usrInfo(username, age, gender) VALUES (?, ?, ?)";
try {
PreparedStatement preStmt = this.coon.prepareStatement(sql);
preStmt.setString(1, name);
preStmt.setInt(2, age);
preStmt.setString(3, gender);
preStmt.executeUpdate();
System.out.println("记录添加成功");
preStmt.close();
} catch (Exception e) {
e.printStackTrace();
}
}
// 查询记录的方法
public void select() {
String sql = "SELECT * FROM usrInfo";
try {
Statement stmt = this.coon.createStatement();
ResultSet rs = stmt.executeQuery(sql);
System.out.println("--------------------------------");
System.out.println("姓名\t年龄\t性别");
System.out.println("--------------------------------");
while (rs.next()) {
String name = rs.getString("username");
int age = rs.getInt("age");
String gender = rs.getString("gender");
System.out.println(name + "\t" + age + "\t" + gender);
}
stmt.close();
} catch (Exception e) {
e.printStackTrace();
}
}
// 更新记录的方法
public void update(String name, int age) {
String sql = "UPDATE usrInfo SET age=? WHERE username=?";
try {
PreparedStatement prestmt = this.coon.prepareStatement(sql);
prestmt.setInt(1, age);
prestmt.setString(2, name);
prestmt.executeUpdate();
System.out.println("记录更新成功");
prestmt.close();
} catch (Exception e) {
e.printStackTrace();
}
}
// 删除记录的方法
public void del(String name) {
String sql = "DELETE FROM usrInfo WHERE username=?";
try {
PreparedStatement prestmt = this.coon.prepareStatement(sql);
prestmt.setString(1, name);
prestmt.executeUpdate();
System.out.println("记录删除成功");
prestmt.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
主程序类 mysqlTest
public class mysqlTest {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
DBConnection db = new DBConnection();
// 查询当前记录
System.out.println("当前usrInfo表中的记录如下:");
db.select();
// 添加记录
System.out.println("请输入要添加的记录(姓名 年龄 性别):");
System.out.print("姓名:");
String name = in.next();
System.out.print("年龄:");
int age = in.nextInt();
System.out.print("性别:");
String gender = in.next();
db.add(name, age, gender);
// 再次查询记录
System.out.println("当前usrInfo表中的记录如下:");
db.select();
// 更新记录
System.out.println("请输入要更新的记录(姓名 新年龄):");
System.out.print("姓名:");
name = in.next();
System.out.print("新年龄:");
age = in.nextInt();
db.update(name, age);
// 再次查询记录
System.out.println("当前usrInfo表中的记录如下:");
db.select();
// 删除记录
System.out.println("请输入要删除的记录的姓名:");
name = in.next();
db.del(name);
// 再次查询记录
System.out.println("当前usrInfo表中的记录如下:");
db.select();
// 关闭数据库连接
db.close();
}
}
详细思路解析
-
数据库连接类
DBConnection
:- 构造函数:加载数据库驱动并建立连接。如果连接成功,输出成功消息。
- 关闭连接方法:关闭数据库连接,并输出关闭消息。
- 添加记录方法:使用
PreparedStatement
插入新记录,防止SQL注入攻击。 - 查询记录方法:使用
Statement
执行查询,并打印结果集中的所有记录。 - 更新记录方法:使用
PreparedStatement
更新记录。 - 删除记录方法:使用
PreparedStatement
删除记录。
-
主程序类
mysqlTest
:- 初始化:创建
Scanner
对象用于接收用户输入,创建DBConnection
对象建立数据库连接。 - 查询记录:首次查询并显示当前表中的所有记录。
- 添加记录:提示用户输入新记录的信息,并调用
add
方法插入记录。 - 再次查询记录:显示更新后的记录列表。
- 更新记录:提示用户输入要更新的记录信息,并调用
update
方法更新记录。 - 再次查询记录:显示更新后的记录列表。
- 删除记录:提示用户输入要删除的记录信息,并调用
del
方法删除记录。 - 再次查询记录:显示最终的记录列表。
- 关闭连接:调用
close
方法关闭数据库连接。
- 初始化:创建
详细解析 DBConnection
类
1. 成员变量
String driver = "com.mysql.cj.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/book?useUnicode=true&characterEncoding=UTF8&serverTimezone=GMT%2B8";
String user = "root";
String password = "123456";
Connection coon = null;
- driver: JDBC驱动类名,用于加载MySQL的JDBC驱动。
- url: 连接数据库的URL,包含数据库服务器地址、端口号、数据库名以及一些连接参数。
- user: 数据库用户名。
- password: 数据库密码。
- coon: 数据库连接对象。
2. 构造函数
public DBConnection() {
try {
// 加载数据库驱动
Class.forName(driver);
// 建立数据库连接
coon = (Connection) DriverManager.getConnection(url, user, password);
if (!coon.isClosed()) {
System.out.println("成功连接到数据库!");
}
} catch (Exception e) {
e.printStackTrace();
}
}
- Class.forName(driver): 动态加载数据库驱动类。
- DriverManager.getConnection(url, user, password): 使用提供的URL、用户名和密码建立数据库连接。
- if (!coon.isClosed()): 检查连接是否成功,如果成功则输出成功消息。
3. 关闭数据库连接的方法
public void close() {
try {
this.coon.close();
System.out.println("数据库连接已关闭");
} catch (Exception e) {
e.printStackTrace();
}
}
- coon.close(): 关闭数据库连接。
- System.out.println(“数据库连接已关闭”): 输出关闭连接的消息。
4. 添加记录的方法
public void add(String name, int age, String gender) {
String sql = "INSERT INTO usrInfo(username, age, gender) VALUES (?, ?, ?)";
try {
PreparedStatement preStmt = this.coon.prepareStatement(sql);
preStmt.setString(1, name);
preStmt.setInt(2, age);
preStmt.setString(3, gender);
preStmt.executeUpdate();
System.out.println("记录添加成功");
preStmt.close();
} catch (Exception e) {
e.printStackTrace();
}
}
- sql: 插入记录的SQL语句,使用占位符
?
。 - preparedStatement: 预编译的SQL语句对象。
- preStmt.setString(1, name): 设置第一个占位符的值为
name
。 - preStmt.setInt(2, age): 设置第二个占位符的值为
age
。 - preStmt.setString(3, gender): 设置第三个占位符的值为
gender
。 - preStmt.executeUpdate(): 执行插入操作。
- System.out.println(“记录添加成功”): 输出添加成功的消息。
- preStmt.close(): 关闭预编译的SQL语句对象。
5. 查询记录的方法
public void select() {
String sql = "SELECT * FROM usrInfo";
try {
Statement stmt = this.coon.createStatement();
ResultSet rs = stmt.executeQuery(sql);
System.out.println("--------------------------------");
System.out.println("姓名\t年龄\t性别");
System.out.println("--------------------------------");
while (rs.next()) {
String name = rs.getString("username");
int age = rs.getInt("age");
String gender = rs.getString("gender");
System.out.println(name + "\t" + age + "\t" + gender);
}
stmt.close();
} catch (Exception e) {
e.printStackTrace();
}
}
- sql: 查询所有记录的SQL语句。
- Statement stmt: SQL语句对象。
- ResultSet rs: 查询结果集。
- while (rs.next()): 遍历结果集中的每一行记录。
- rs.getString(“username”): 获取字段
username
的值。 - rs.getInt(“age”): 获取字段
age
的值。 - rs.getString(“gender”): 获取字段
gender
的值。 - System.out.println(name + “\t” + age + “\t” + gender): 输出每条记录的信息。
- stmt.close(): 关闭SQL语句对象。
6. 更新记录的方法
public void update(String name, int age) {
String sql = "UPDATE usrInfo SET age=? WHERE username=?";
try {
PreparedStatement prestmt = this.coon.prepareStatement(sql);
prestmt.setInt(1, age);
prestmt.setString(2, name);
prestmt.executeUpdate();
System.out.println("记录更新成功");
prestmt.close();
} catch (Exception e) {
e.printStackTrace();
}
}
- sql: 更新记录的SQL语句,使用占位符
?
。 - preparedStatement: 预编译的SQL语句对象。
- prestmt.setInt(1, age): 设置第一个占位符的值为
age
。 - prestmt.setString(2, name): 设置第二个占位符的值为
name
。 - prestmt.executeUpdate(): 执行更新操作。
- System.out.println(“记录更新成功”): 输出更新成功的消息。
- prestmt.close(): 关闭预编译的SQL语句对象。
7. 删除记录的方法
public void del(String name) {
String sql = "DELETE FROM usrInfo WHERE username=?";
try {
PreparedStatement prestmt = this.coon.prepareStatement(sql);
prestmt.setString(1, name);
prestmt.executeUpdate();
System.out.println("记录删除成功");
prestmt.close();
} catch (Exception e) {
e.printStackTrace();
}
}
- sql: 删除记录的SQL语句,使用占位符
?
。 - preparedStatement: 预编译的SQL语句对象。
- prestmt.setString(1, name): 设置占位符的值为
name
。 - prestmt.executeUpdate(): 执行删除操作。
- System.out.println(“记录删除成功”): 输出删除成功的消息。
- prestmt.close(): 关闭预编译的SQL语句对象。
主程序类 mysqlTest
1. 主方法
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
DBConnection db = new DBConnection();
// 查询当前记录
System.out.println("当前usrInfo表中的记录如下:");
db.select();
// 添加记录
System.out.println("请输入要添加的记录(姓名 年龄 性别):");
System.out.print("姓名:");
String name = in.next();
System.out.print("年龄:");
int age = in.nextInt();
System.out.print("性别:");
String gender = in.next();
db.add(name, age, gender);
// 再次查询记录
System.out.println("当前usrInfo表中的记录如下:");
db.select();
// 更新记录
System.out.println("请输入要更新的记录(姓名 新年龄):");
System.out.print("姓名:");
name = in.next();
System.out.print("新年龄:");
age = in.nextInt();
db.update(name, age);
// 再次查询记录
System.out.println("当前usrInfo表中的记录如下:");
db.select();
// 删除记录
System.out.println("请输入要删除的记录的姓名:");
name = in.next();
db.del(name);
// 再次查询记录
System.out.println("当前usrInfo表中的记录如下:");
db.select();
// 关闭数据库连接
db.close();
}
- Scanner in = new Scanner(System.in): 创建一个
Scanner
对象用于接收用户输入。 - DBConnection db = new DBConnection(): 创建一个
DBConnection
对象,建立数据库连接。 - 查询当前记录: 调用
select
方法显示当前表中的所有记录。 - 添加记录: 提示用户输入新记录的信息,并调用
add
方法插入记录。 - 再次查询记录: 调用
select
方法显示更新后的记录列表。 - 更新记录: 提示用户输入要更新的记录信息,并调用
update
方法更新记录。 - 再次查询记录: 调用
select
方法显示更新后的记录列表。 - 删除记录: 提示用户输入要删除的记录信息,并调用
del
方法删除记录。 - 再次查询记录: 调用
select
方法显示最终的记录列表。 - 关闭数据库连接: 调用
close
方法关闭数据库连接。
好的,我们继续深入解析代码中的每个部分,确保每个细节都清晰明了。
继续解析 DBConnection
类
8. 异常处理
在上述代码中,每个方法都使用了try-catch
块来捕获可能发生的异常。这是非常重要的,因为数据库操作可能会遇到各种错误,例如连接失败、SQL语法错误等。
try {
// 数据库操作代码
} catch (Exception e) {
e.printStackTrace();
}
- try: 尝试执行数据库操作。
- catch (Exception e): 捕获所有类型的异常。
- e.printStackTrace(): 打印异常的堆栈跟踪,帮助调试。
9. 资源管理
每次操作完成后,都需要关闭相关的数据库资源,如PreparedStatement
、Statement
和ResultSet
。这不仅有助于释放系统资源,还可以避免内存泄漏。
preStmt.close();
stmt.close();
rs.close();
继续解析 mysqlTest
类
1. 用户输入
在主程序中,使用Scanner
类来接收用户的输入。Scanner
类提供了多种方法来读取不同类型的输入。
Scanner in = new Scanner(System.in);
- in.next(): 读取下一个字符串。
- in.nextInt(): 读取下一个整数。
2. 主方法的详细流程
初始化
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
DBConnection db = new DBConnection();
- Scanner in = new Scanner(System.in): 创建一个
Scanner
对象,用于从控制台读取用户输入。 - DBConnection db = new DBConnection(): 创建一个
DBConnection
对象,建立数据库连接。
查询当前记录
// 查询当前记录
System.out.println("当前usrInfo表中的记录如下:");
db.select();
- System.out.println(“当前usrInfo表中的记录如下:”): 输出提示信息。
- db.select(): 调用
select
方法查询并显示当前表中的所有记录。
添加记录
// 添加记录
System.out.println("请输入要添加的记录(姓名 年龄 性别):");
System.out.print("姓名:");
String name = in.next();
System.out.print("年龄:");
int age = in.nextInt();
System.out.print("性别:");
String gender = in.next();
db.add(name, age, gender);
- System.out.println(“请输入要添加的记录(姓名 年龄 性别):”): 输出提示信息。
- System.out.print(“姓名:”): 提示用户输入姓名。
- String name = in.next(): 读取用户输入的姓名。
- System.out.print(“年龄:”): 提示用户输入年龄。
- int age = in.nextInt(): 读取用户输入的年龄。
- System.out.print(“性别:”): 提示用户输入性别。
- String gender = in.next(): 读取用户输入的性别。
- db.add(name, age, gender): 调用
add
方法将新记录添加到数据库中。
再次查询记录
// 再次查询记录
System.out.println("当前usrInfo表中的记录如下:");
db.select();
- System.out.println(“当前usrInfo表中的记录如下:”): 输出提示信息。
- db.select(): 调用
select
方法查询并显示当前表中的所有记录。
更新记录
// 更新记录
System.out.println("请输入要更新的记录(姓名 新年龄):");
System.out.print("姓名:");
name = in.next();
System.out.print("新年龄:");
age = in.nextInt();
db.update(name, age);
- System.out.println(“请输入要更新的记录(姓名 新年龄):”): 输出提示信息。
- System.out.print(“姓名:”): 提示用户输入要更新的姓名。
- String name = in.next(): 读取用户输入的姓名。
- System.out.print(“新年龄:”): 提示用户输入新的年龄。
- int age = in.nextInt(): 读取用户输入的新年龄。
- db.update(name, age): 调用
update
方法更新指定记录的年龄。
再次查询记录
// 再次查询记录
System.out.println("当前usrInfo表中的记录如下:");
db.select();
- System.out.println(“当前usrInfo表中的记录如下:”): 输出提示信息。
- db.select(): 调用
select
方法查询并显示当前表中的所有记录。
删除记录
// 删除记录
System.out.println("请输入要删除的记录的姓名:");
name = in.next();
db.del(name);
- System.out.println(“请输入要删除的记录的姓名:”): 输出提示信息。
- String name = in.next(): 读取用户输入的姓名。
- db.del(name): 调用
del
方法删除指定记录。
再次查询记录
// 再次查询记录
System.out.println("当前usrInfo表中的记录如下:");
db.select();
- System.out.println(“当前usrInfo表中的记录如下:”): 输出提示信息。
- db.select(): 调用
select
方法查询并显示当前表中的所有记录。
关闭数据库连接
// 关闭数据库连接
db.close();
- db.close(): 调用
close
方法关闭数据库连接。
总结
通过以上详细的解析,我们可以看到整个程序的工作流程如下:
- 初始化:创建数据库连接。
- 查询记录:显示当前表中的所有记录。
- 添加记录:根据用户输入添加新记录。
- 再次查询记录:显示更新后的记录列表。
- 更新记录:根据用户输入更新指定记录。
- 再次查询记录:显示更新后的记录列表。
- 删除记录:根据用户输入删除指定记录。
- 再次查询记录:显示最终的记录列表。
- 关闭连接:关闭数据库连接。
这个程序有哪些常见的异常处理?
在数据库操作中,常见的异常类型包括但不限于以下几种。我们可以通过捕获这些异常来处理不同的错误情况,确保程序的健壮性和稳定性。
常见的异常类型及其处理
-
ClassNotFoundException
- 原因:无法找到指定的数据库驱动类。
- 处理:检查驱动类名是否正确,确保驱动类文件存在于类路径中。
-
SQLException
- 原因:数据库操作过程中发生错误,如SQL语法错误、连接失败、事务处理错误等。
- 处理:捕获
SQLException
,并根据具体的错误代码和消息进行相应的处理。
-
NullPointerException
- 原因:尝试访问空对象的属性或方法。
- 处理:在访问对象之前,检查对象是否为
null
。
-
InputMismatchException
- 原因:使用
Scanner
读取输入时,用户输入的数据类型与预期不符。 - 处理:捕获
InputMismatchException
,提示用户输入正确的数据类型,并重新读取输入。
- 原因:使用
-
IOException
- 原因:输入/输出操作失败。
- 处理:捕获
IOException
,并根据具体情况处理,如关闭文件流等。
示例代码中的异常处理
1. DBConnection
类中的异常处理
public class DBConnection {
// 数据库连接相关配置
String driver = "com.mysql.cj.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/book?useUnicode=true&characterEncoding=UTF8&serverTimezone=GMT%2B8";
String user = "root";
String password = "123456";
Connection coon = null;
// 构造函数,初始化数据库连接
public DBConnection() {
try {
// 加载数据库驱动
Class.forName(driver);
// 建立数据库连接
coon = (Connection) DriverManager.getConnection(url, user, password);
if (!coon.isClosed()) {
System.out.println("成功连接到数据库!");
}
} catch (ClassNotFoundException e) {
System.err.println("找不到数据库驱动类:" + e.getMessage());
} catch (SQLException e) {
System.err.println("数据库连接失败:" + e.getMessage());
} catch (Exception e) {
e.printStackTrace();
}
}
// 关闭数据库连接的方法
public void close() {
try {
if (coon != null && !coon.isClosed()) {
coon.close();
System.out.println("数据库连接已关闭");
}
} catch (SQLException e) {
System.err.println("关闭数据库连接失败:" + e.getMessage());
}
}
// 添加记录的方法
public void add(String name, int age, String gender) {
String sql = "INSERT INTO usrInfo(username, age, gender) VALUES (?, ?, ?)";
try {
PreparedStatement preStmt = this.coon.prepareStatement(sql);
preStmt.setString(1, name);
preStmt.setInt(2, age);
preStmt.setString(3, gender);
preStmt.executeUpdate();
System.out.println("记录添加成功");
} catch (SQLException e) {
System.err.println("添加记录失败:" + e.getMessage());
} finally {
try {
if (preStmt != null) {
preStmt.close();
}
} catch (SQLException e) {
System.err.println("关闭PreparedStatement失败:" + e.getMessage());
}
}
}
// 查询记录的方法
public void select() {
String sql = "SELECT * FROM usrInfo";
try {
Statement stmt = this.coon.createStatement();
ResultSet rs = stmt.executeQuery(sql);
System.out.println("--------------------------------");
System.out.println("姓名\t年龄\t性别");
System.out.println("--------------------------------");
while (rs.next()) {
String name = rs.getString("username");
int age = rs.getInt("age");
String gender = rs.getString("gender");
System.out.println(name + "\t" + age + "\t" + gender);
}
} catch (SQLException e) {
System.err.println("查询记录失败:" + e.getMessage());
} finally {
try {
if (stmt != null) {
stmt.close();
}
} catch (SQLException e) {
System.err.println("关闭Statement失败:" + e.getMessage());
}
}
}
// 更新记录的方法
public void update(String name, int age) {
String sql = "UPDATE usrInfo SET age=? WHERE username=?";
try {
PreparedStatement prestmt = this.coon.prepareStatement(sql);
prestmt.setInt(1, age);
prestmt.setString(2, name);
prestmt.executeUpdate();
System.out.println("记录更新成功");
} catch (SQLException e) {
System.err.println("更新记录失败:" + e.getMessage());
} finally {
try {
if (prestmt != null) {
prestmt.close();
}
} catch (SQLException e) {
System.err.println("关闭PreparedStatement失败:" + e.getMessage());
}
}
}
// 删除记录的方法
public void del(String name) {
String sql = "DELETE FROM usrInfo WHERE username=?";
try {
PreparedStatement prestmt = this.coon.prepareStatement(sql);
prestmt.setString(1, name);
prestmt.executeUpdate();
System.out.println("记录删除成功");
} catch (SQLException e) {
System.err.println("删除记录失败:" + e.getMessage());
} finally {
try {
if (prestmt != null) {
prestmt.close();
}
} catch (SQLException e) {
System.err.println("关闭PreparedStatement失败:" + e.getMessage());
}
}
}
}
2. mysqlTest
类中的异常处理
public class mysqlTest {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
DBConnection db = null;
try {
db = new DBConnection();
// 查询当前记录
System.out.println("当前usrInfo表中的记录如下:");
db.select();
// 添加记录
System.out.println("请输入要添加的记录(姓名 年龄 性别):");
System.out.print("姓名:");
String name = in.next();
System.out.print("年龄:");
int age = in.nextInt();
System.out.print("性别:");
String gender = in.next();
db.add(name, age, gender);
// 再次查询记录
System.out.println("当前usrInfo表中的记录如下:");
db.select();
// 更新记录
System.out.println("请输入要更新的记录(姓名 新年龄):");
System.out.print("姓名:");
name = in.next();
System.out.print("新年龄:");
age = in.nextInt();
db.update(name, age);
// 再次查询记录
System.out.println("当前usrInfo表中的记录如下:");
db.select();
// 删除记录
System.out.println("请输入要删除的记录的姓名:");
name = in.next();
db.del(name);
// 再次查询记录
System.out.println("当前usrInfo表中的记录如下:");
db.select();
} catch (InputMismatchException e) {
System.err.println("输入类型错误,请输入正确的数据类型:" + e.getMessage());
} catch (Exception e) {
e.printStackTrace();
} finally {
if (db != null) {
db.close();
}
in.close();
}
}
}
解释
-
ClassNotFoundException
:- 在加载数据库驱动时,如果找不到指定的驱动类,会抛出
ClassNotFoundException
。 - 处理方式:输出错误信息,提示用户检查驱动类名和驱动文件路径。
- 在加载数据库驱动时,如果找不到指定的驱动类,会抛出
-
SQLException
:- 在执行数据库操作时,如果发生SQL语法错误、连接失败等问题,会抛出
SQLException
。 - 处理方式:捕获
SQLException
,输出错误信息,帮助用户定位问题。
- 在执行数据库操作时,如果发生SQL语法错误、连接失败等问题,会抛出
-
NullPointerException
:- 在访问对象属性或方法时,如果对象为
null
,会抛出NullPointerException
。 - 处理方式:在访问对象之前,检查对象是否为
null
,并在必要时输出错误信息。
- 在访问对象属性或方法时,如果对象为
-
InputMismatchException
:- 使用
Scanner
读取输入时,如果用户输入的数据类型与预期不符,会抛出InputMismatchException
。 - 处理方式:捕获
InputMismatchException
,提示用户输入正确的数据类型,并重新读取输入。
- 使用
-
IOException
:- 在进行文件操作或其他I/O操作时,如果发生错误,会抛出
IOException
。 - 处理方式:捕获
IOException
,输出错误信息,并根据具体情况处理。
- 在进行文件操作或其他I/O操作时,如果发生错误,会抛出