首页 > 代码库 > JDBC的异常

JDBC的异常

以下内容引用自http://wiki.jikexueyuan.com/project/jdbc/exceptions.html:

异常处理可以允许处理一个异常情况,例如可控方式的程序定义错误。

当异常情况发生时,将抛出一个异常。抛出这个词意味着当前执行的程序停止,控制器被重定向到最近的适用的catch子句。如果没有适用的catch子句存在,那么程序执行被终止。

JDBC的异常处理是非常类似于Java的异常处理,但对于JDBC,最常见的异常是java.sql.SQLException。

一、SQLException方法

SQLException异常在驱动程序和数据库中都可能出现。当出现这个异常时,SQLException类型的对象将被传递到catch子句。

传递的SQLException对象具有以下的方法,以下的方法可用于检索该异常的额外信息:

方法描述
getErrorCode( )获取与异常关联的错误号。
getMessage( )获取JDBC驱动程序的错误信息,该错误是由驱动程序处理的,或者在数据库错误中获取Oracl错误号和错误信息。
getSQLState( )获取XOPEN SQLstate字符串。对于JDBC驱动程序错误,使用该方法不能返回有用的信息。对于数据库错误,返回第五位的XOPEN SQLstate代码。该方法可以返回null。
getNextException( )获取异常链的下一个Exception对象。
printStackTrace( )打印当前异常或者抛出,其回溯到标准的流错误。
printStackTrace(PrintStream s)打印该抛出,其回溯到指定的打印流。
printStackTrace(PrintWriter w)打印该抛出,其回溯到指定的打印写入。

通过利用可从Exception对象提供的信息,可以捕获异常并继续运行程序。这是一个try块的一般格式:

try {   // Your risky code goes between these curly braces!!!}catch(Exception ex) {   // Your exception handling code goes between these    // curly braces, similar to the exception clause    // in a PL/SQL block.}finally {   // Your must-always-be-executed code goes between these    // curly braces. Like closing database connection.}

示例:

研究学习下面的示例代码来了解try....catch...finally块的使用。

//STEP 1. Import required packagesimport java.sql.*;public class JDBCExample {    // JDBC driver name and database URL    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";    static final String DB_URL = "jdbc:mysql://localhost/Test?serverTimezone=UTC";    // Database credentials    static final String USER = "root";    static final String PASS = "root";    public static void main(String[] args) {        Connection conn = null;        try {            // STEP 2: Register JDBC driver            Class.forName("com.mysql.jdbc.Driver");            // STEP 3: Open a connection            System.out.println("Connecting to database...");            conn = DriverManager.getConnection(DB_URL, USER, PASS);            // STEP 4: Execute a query            System.out.println("Creating statement...");            Statement stmt = conn.createStatement();            String sql;            sql = "SELECT id, first, last, age FROM Employees";            ResultSet rs = stmt.executeQuery(sql);            // STEP 5: Extract data from result set            while (rs.next()) {                // Retrieve by column name                int id = rs.getInt("id");                int age = rs.getInt("age");                String first = rs.getString("first");                String last = rs.getString("last");                // Display values                System.out.print("ID: " + id);                System.out.print(", Age: " + age);                System.out.print(", First: " + first);                System.out.println(", Last: " + last);            }            // STEP 6: Clean-up environment            rs.close();            stmt.close();            conn.close();        } catch (SQLException se) {            // Handle errors for JDBC            se.printStackTrace();        } catch (Exception e) {            // Handle errors for Class.forName            e.printStackTrace();        } finally {            // finally block used to close resources            try {                if (conn != null)                    conn.close();            } catch (SQLException se) {                se.printStackTrace();            } // end finally try        } // end try        System.out.println("Goodbye!");    }// end main}// end JDBCExample

当运行JDBCExample时,如果没有问题它将展示下面的结果,否则相应的错误将被捕获并会显示错误消息:

技术分享

技术分享

 

测试工程:https://github.com/easonjim/5_java_example/tree/master/jdbcbasics/test6

JDBC的异常