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

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

相关文章:

  • Hibernate(十六):Hibernate二级缓存
  • 函数计算-触发OSS来处理图片加水印和大小裁剪
  • 【Android Studio探索之路系列】之六:Android Studio加入依赖
  • 重装系统再也不用担心桌面文件丢失了
  • Node.js转化GBK编码 - iconv-lite
  • 初学makefile
  • SSM框架搭架
  • Maven工程配置代码覆盖工具Jacoco
  • linux进程D状态_转
  • MongoDB 聚合查询
  • Android组件 - 收藏集 - 掘金
  • java统计abacbacdadbc中的每个字母出现的次数,输出格式是:a(4)b(3)c(3)d(2)
  • ASP.NET Core 简单实现七牛图片上传(FormData 和 Base64)
  • docker 镜像(四)
  • 笨方法使用Kubernetes实现持续交付
  • Apache的80端口被占用以及访问时报错403
  • Django 博客开发教程 8 - 博客文章详情页
  • Elasticsearch 参考指南(升级前重新索引)
  • golang 发送GET和POST示例
  • java8 Stream Pipelines 浅析
  • JDK9: 集成 Jshell 和 Maven 项目.
  • Linux快速复制或删除大量小文件
  • maya建模与骨骼动画快速实现人工鱼
  • mysql 5.6 原生Online DDL解析
  • Octave 入门
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • use Google search engine
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 动态规划入门(以爬楼梯为例)
  • 构建二叉树进行数值数组的去重及优化
  • 驱动程序原理
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 我的面试准备过程--容器(更新中)
  • mysql面试题分组并合并列
  • 仓管云——企业云erp功能有哪些?
  • 如何在招聘中考核.NET架构师
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • ###STL(标准模板库)
  • #etcd#安装时出错
  • (4.10~4.16)
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (办公)springboot配置aop处理请求.
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (九)信息融合方式简介
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (十八)SpringBoot之发送QQ邮件
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (未解决)macOS matplotlib 中文是方框
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)