Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 638|回复: 0

JDBC的异常

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-7-21 17:21:39 | 显示全部楼层 |阅读模式

    以下内容引用自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

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-12-22 18:42 , Processed in 0.057814 second(s), 27 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表