📜  JDBC-异常处理(1)

📅  最后修改于: 2023-12-03 15:02:07.367000             🧑  作者: Mango

JDBC 异常处理

异常介绍

在使用 JDBC 进行数据库操作时,会遇到各种可能的异常情况。例如:数据库连接失败、SQL 语句错误、数据库表不存在等等。为了保证程序的健壮性,我们需要合理处理这些异常。

异常处理方式

JDBC 的异常处理方式主要有以下几种:

1. 使用 try-catch-finally 语句

在进行数据库操作时,可以使用 try-catch-finally 语句来捕获并处理可能发生的异常。

try {
    // 获取数据库连接
    Connection conn = DriverManager.getConnection(url, username, password);

    // 创建 Statement 对象
    Statement stmt = conn.createStatement();

    // 执行 SQL 语句
    String sql = "SELECT * FROM student";
    ResultSet rs = stmt.executeQuery(sql);

    // 处理查询结果集
    while(rs.next()) {
        // 输出查询结果
        System.out.println(rs.getInt("id") + " " + rs.getString("name"));
    }

    // 关闭资源
    rs.close();
    stmt.close();
    conn.close();
} catch(SQLException e) {
    // 处理异常
    e.printStackTrace();
} finally {
    // 释放资源
}
2. 使用 try-with-resources 语句

Java 7 引入的 try-with-resources 语句可以自动关闭资源,避免在 finally 块中手动关闭。

try (Connection conn = DriverManager.getConnection(url, username, password);
     Statement stmt = conn.createStatement();
     ResultSet rs = stmt.executeQuery("SELECT * FROM student")) {

    while(rs.next()) {
        System.out.println(rs.getInt("id") + " " + rs.getString("name"));
    }
} catch (SQLException e) {
    e.printStackTrace();
}

使用 try-with-resources 语句的好处是代码可读性更好,也不需要在 finally 块中手动关闭资源。

3. 统一处理异常

在一个应用程序中,可以统一处理所有的 JDBC 异常。这样可以减少代码重复,提高代码的可维护性。

public class JDBCUtil {

    public static Connection getConnection() throws SQLException {
        // 获取数据库连接
        return DriverManager.getConnection(url, username, password);
    }

    // 关闭资源
    public static void close(Connection conn, Statement stmt, ResultSet rs) {
        try {
            if(rs != null) {
                rs.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if(stmt != null) {
                    stmt.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                try {
                    if(conn != null) {
                        conn.close();
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

然后在程序中使用 JDBCUtil 类获取数据库连接和关闭资源。

try {
    Connection conn = JDBCUtil.getConnection();
    Statement stmt = conn.createStatement();
    ResultSet rs = stmt.executeQuery("SELECT * FROM student");

    while(rs.next()) {
        System.out.println(rs.getInt("id") + " " + rs.getString("name"));
    }

} catch (SQLException e) {
    e.printStackTrace(); // 统一处理异常
} finally {
    JDBCUtil.close(conn, stmt, rs); // 统一关闭资源
}
异常类介绍

JDBC 中常见的异常类包括:

SQLException

SQLException 表示一个数据库访问错误或者其它错误。

BatchUpdateException

BatchUpdateException 表示在批处理时出现错误。

DataTruncation

DataTruncation 表示插入或更新数据时,数据被截断。

SQLWarning

SQLWarning 表示警告信息,不会停止程序执行。

小结

JDBC 的异常处理是保证程序健壮性的一个重要环节。在代码中合理处理异常,可以提高程序的可读性和可维护性。同时,JDBC 中的异常类也需要了解,以便在处理异常时更加得心应手。