当前位置: 首页 > article >正文

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

详细思路解析

  1. 数据库连接类 DBConnection

    • 构造函数:加载数据库驱动并建立连接。如果连接成功,输出成功消息。
    • 关闭连接方法:关闭数据库连接,并输出关闭消息。
    • 添加记录方法:使用PreparedStatement插入新记录,防止SQL注入攻击。
    • 查询记录方法:使用Statement执行查询,并打印结果集中的所有记录。
    • 更新记录方法:使用PreparedStatement更新记录。
    • 删除记录方法:使用PreparedStatement删除记录。
  2. 主程序类 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. 资源管理

每次操作完成后,都需要关闭相关的数据库资源,如PreparedStatementStatementResultSet。这不仅有助于释放系统资源,还可以避免内存泄漏。

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方法关闭数据库连接。

总结

通过以上详细的解析,我们可以看到整个程序的工作流程如下:

  1. 初始化:创建数据库连接。
  2. 查询记录:显示当前表中的所有记录。
  3. 添加记录:根据用户输入添加新记录。
  4. 再次查询记录:显示更新后的记录列表。
  5. 更新记录:根据用户输入更新指定记录。
  6. 再次查询记录:显示更新后的记录列表。
  7. 删除记录:根据用户输入删除指定记录。
  8. 再次查询记录:显示最终的记录列表。
  9. 关闭连接:关闭数据库连接。

这个程序有哪些常见的异常处理?

在数据库操作中,常见的异常类型包括但不限于以下几种。我们可以通过捕获这些异常来处理不同的错误情况,确保程序的健壮性和稳定性。

常见的异常类型及其处理

  1. ClassNotFoundException

    • 原因:无法找到指定的数据库驱动类。
    • 处理:检查驱动类名是否正确,确保驱动类文件存在于类路径中。
  2. SQLException

    • 原因:数据库操作过程中发生错误,如SQL语法错误、连接失败、事务处理错误等。
    • 处理:捕获SQLException,并根据具体的错误代码和消息进行相应的处理。
  3. NullPointerException

    • 原因:尝试访问空对象的属性或方法。
    • 处理:在访问对象之前,检查对象是否为null
  4. InputMismatchException

    • 原因:使用Scanner读取输入时,用户输入的数据类型与预期不符。
    • 处理:捕获InputMismatchException,提示用户输入正确的数据类型,并重新读取输入。
  5. 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();
        }
    }
}

解释

  1. ClassNotFoundException:

    • 在加载数据库驱动时,如果找不到指定的驱动类,会抛出ClassNotFoundException
    • 处理方式:输出错误信息,提示用户检查驱动类名和驱动文件路径。
  2. SQLException:

    • 在执行数据库操作时,如果发生SQL语法错误、连接失败等问题,会抛出SQLException
    • 处理方式:捕获SQLException,输出错误信息,帮助用户定位问题。
  3. NullPointerException:

    • 在访问对象属性或方法时,如果对象为null,会抛出NullPointerException
    • 处理方式:在访问对象之前,检查对象是否为null,并在必要时输出错误信息。
  4. InputMismatchException:

    • 使用Scanner读取输入时,如果用户输入的数据类型与预期不符,会抛出InputMismatchException
    • 处理方式:捕获InputMismatchException,提示用户输入正确的数据类型,并重新读取输入。
  5. IOException:

    • 在进行文件操作或其他I/O操作时,如果发生错误,会抛出IOException
    • 处理方式:捕获IOException,输出错误信息,并根据具体情况处理。

http://www.kler.cn/a/408107.html

相关文章:

  • 内网渗透横向移动1
  • C++ 中数组作为参数传递时,在函数中使用sizeof 为什么无法得到数组的长度
  • 数据结构与算法——1122—复杂度总结检测相同元素
  • leetcode top100中的30道简单和中等难度的题
  • VMware虚拟机(Ubuntu或centOS)共享宿主机网络资源
  • 2022 年中高职组“网络安全”赛项-海南省省竞赛任务书-1-B模块B-1-Windows操作系统渗透测试
  • C++适配器模式之可插入适配器的实现模式和方法
  • 大模型(LLMs)推理篇
  • 前端开发调试之移动端调试学习笔记
  • 【自动化】如何从列表中找到图片并命名保存下来
  • 2061:【例1.2】梯形面积(http://ybt.ssoier.cn:8088/problem_show.php?pid=2061)
  • 科研实验室的数字化转型:Spring Boot系统
  • C# 命名空间详解(一)
  • 计算机网络socket编程(5)_TCP网络编程实现echo_server
  • C语言:操作符详解1
  • Java 腾讯云短信发送
  • github中banch和tag的应用
  • 【Mybatis】动态SQL详解
  • 金融服务的未来:测试自动化如何驱动合规、安全与创新
  • PHP实现选择排序
  • Rust宏系列教程—实现复杂派生宏
  • 以3D数字人AI产品赋能教育培训人才发展,魔珐科技亮相AI+教育创新与人才发展大会
  • 线程控制方法之wait和sleep的区别
  • 深入理解索引(二)
  • ubuntu搭建k8s环境详细教程
  • 「Mac玩转仓颉内测版28」基础篇8 - 元组类型详解