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 packages
import 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

时间: 2024-08-26 09:04:18

JDBC的异常的相关文章

JDBC 数据库异常 Exception 关闭的(语句,连接,ResultSet)

如果在rs.next()之前关闭了Statement或PreparedStatement,会导致下面的异常: java.sql.SQLException: 关闭的语句: next 如果在rs.next()之前关闭了Connection,会导致下面的异常: java.sql.SQLException: 关闭的连接: next问题 如果在rs.next()之前关闭了ResultSet,会导致下面的异常: java.sql.SQLException: 关闭的 Resultset: next JDBC

JDBC和异常总结及常见使用

JDBC -一.JDBC连接过程 01.注册驱动 Class.forName("oracle.jdbc.driver.OracleDriver"); 02.获取连接 Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@10.0.19.252:1521:orcl","itxy","itxy"); -二.JDBC 常用接口 JDBC :   sun提供的

【JDBC发展史】从JDBC1.0到JDBC4.0

JDBC是一种可用于执行SQL语句的JavaAPI(ApplicationProgrammingInterface应用程序设计接口).它由一些Java语言编写的类和界面组成.JDBC为数据库应用开发人员.数据库前台工具开发人员提供了一种标准的应用程序设计接口,使开发人员可以用纯Java语言编写完整的数据库应用程序. 本文介绍了JDBC1.0--JDBC4.0的发展史,并带有少量的编程. 一.ODBC到JDBC的发展历程 说到JDBC,很容易让人联想到另一个十分熟悉的字眼"ODBC".它

编写高质量代码改善java程序的151个建议——[110-117]异常及Web项目中异常处理

原创地址:http://www.cnblogs.com/Alandre/(泥沙砖瓦浆木匠),需要转载的,保留下! 文章宗旨:Talk is cheap show me the code. 大成若缺,其用不弊.大盈若冲,其用不穷.  <道德经-老子>最完满的东西,好似有残缺一样,但它的作用永远不会衰竭:最充盈的东西,好似是空虚一样,但是它的作用是不会穷尽的 Written In The Font 摘要: 异常处理概述 学习内容: 建议110: 提倡异常封装 建议111: 采用异常链传递异常 建议

Java SE 6 新特性: Java DB 和 JDBC 4.0

http://www.ibm.com/developerworks/cn/java/j-lo-jse65/index.html 长久以来,由于大量(甚至几乎所有)的 Java 应用都依赖于数据库,如何使用 Java 语言高效.可靠.简洁地访问数据库一直是程序员们津津乐道的话题.新发布的 Java SE 6 也在这方面更上层楼,为编程人员提供了许多好用的新特性.其中最显著的,莫过于 Java SE 6 拥有了一个内嵌的 100% 用 Java 语言编写的数据库系统.并且,Java 6 开始支持 J

Hibernate 异常总结

异常一 异常一 异常描述: Sax解析异常:cvc-复杂的类型,发现了以元素maping开头的无效内容,应该是以 '{"http://www.hibernate.org/xsd/orm/cfg":property, "http://www.hibernate.org/xsd/orm/cfg":mapping, "http://www.hibernate.org/xsd/orm/cfg":class-cache, "http://www.

java学习路线

在学校里学到的东西太浅了,工作中才发现啥也不会,很是困扰.来公司实习了一个月了,进展很慢,导师和boss可能对我有些失了一些信心,但我自己不能对自己丢了信心. 到了迷茫期,所以在网上找些过来人的经验自我指导,我相信坚持下去一定会有破茧成蝶的一天的~ 摘抄心灵: 这些年我一直提醒自己一件事情,千万不要自己感动自己.人难免有天生自怜的情绪,唯有时刻保持清醒,才能看清真正的价值在哪里.我们每人都有别人不知道的创伤,我们战斗就是为了摆脱这个创伤. ------卡尔维诺 卡尔维诺中文站:http://ww

[Java] SSH框架笔记_SSH三大框架的工作原理及流程

Hibernate工作原理及为什么要用? 原理:1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件2.由hibernate.cfg.xml中的<mapping resource="com/xx/User.hbm.xml"/>读取并解析映射信息3.通过config.buildSessionFactory();//创建SessionFactory4.sessionFactory.openSession();//打

SSH三大框架的原理

Hibernate工作原理及为什么要用? 原理:1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件2.由hibernate.cfg.xml中的<mapping resource="com/xx/User.hbm.xml"/>读取并解析映射信息3.通过config.buildSessionFactory();//创建SessionFactory4.sessionFactory.openSession();//打