第十三节 JDBC异常

news/2024/5/19 0:21:15 标签: java, 数据库, JDBC, MYSQL, eclipse, intellij-idea, 面向对象

异常处理允许我们以受控的方式处理异常情况,而不是直接退出程序,例如程序定义的错误。

发生异常时可以抛出异常。术语“异常”表示当前的程序执行停止,并且被重定向到最近的适用的catch子句。如果没有适用的catch子句存在,则程序的执行结束。

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

SQLException方法

驱动程序和数据库中都会发生SQLException。 发生这种异常时,SQLException类型的对象将被传递给catch子句。

传递的SQLException对象具有以下可用于检索有关异常信息的方法 -

方法描述
getErrorCode( )获取与异常关联的错误代码。
getMessage( )获取驱动程序处理的错误的JDBC驱动程序的错误消息,或获取数据库错误的Oracle错误代码和消息。
getSQLState( )获取XOPEN SQLstate字符串。 对于JDBC驱动程序错误,不会从此方法返回有用的信息。 对于数据库错误,返回五位数的XOPEN SQLstate代码。 此方法可以返回null
getNextException( )获取异常链中的下一个Exception对象。
printStackTrace( )打印当前异常或可抛出的异常,并将其追溯到标准错误流。
printStackTrace(PrintStream s)将此throwable及其回溯打印到指定的打印流。
printStackTrace(PrintWriter w)打印这个throwable,它是回溯到指定的打印器(PrintWriter)。

通过利用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.
}

Java

实例

学习研究以下示例代码以了解try …. catch … finally块的用法。将下面代码保存到文件:TryCatchFinally.java 中,

//STEP 1. Import required packages
// See more detail at http://www.yiibai.com/jdbc/


import java.sql.*;

public class TryCatchFinally {
   // JDBC driver name and database URL
   static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
   static final String DB_URL = "jdbc:mysql://localhost/EMP";

   //  Database credentials
   static final String USER = "root";
   static final String PASS = "123456";

   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

Java

现在编译上面例子中代码如下 -

F:\worksp\jdbc>javac -Djava.ext.dirs=F:\worksp\jdbc\libs TryCatchFinally.java

Shell

执行上面编译后的代码,得到以下结果 -

F:\worksp\jdbc>java -Djava.ext.dirs=F:\worksp\jdbc\libs TryCatchFinally
Connecting to database...
Thu Jun 01 02:59:01 CST 2017 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
Creating statement...
ID: 100, Age: 28, First: Max, Last: Su
ID: 101, Age: 25, First: Wei, Last: Wang
ID: 102, Age: 35, First: Xueyou, Last: Zhang
ID: 103, Age: 30, First: Jack, Last: Ma
ID: 106, Age: 28, First: Curry, Last: Stephen
ID: 107, Age: 32, First: Kobe, Last: Bryant
Goodbye!

F:\worksp\jdbc>


http://www.niftyadmin.cn/n/5445164.html

相关文章

搭建Flutter开发环境、从零基础到精通(文末送书【北大出版社】)

目录 搭建开发环境 1. 下载Flutter SDK 2. 设置镜像地址及环境变量 3. 安装与设置Android Studio 4. 安装Visual Studio Code与Flutter开发插件 5. IDE的使用和配置 6. 安装Xcode 7. 检查Flutter开发环境 好书推荐 内容简介 作者简介 搭建开发环境 Flutter可以跨平…

树莓派摄像头

有了树莓派摄像头,摄像头就可以离服务器较远的距离,比如把摄像头固定在墙上,或者固定在门口。 新建images目录,用于保存生成的图像。 新建client.py,作为客户端程序。 【代码 client.py】 # -*- coding: utf-8 -*-…

多线程基础 -概念、创建、等待、分离、终止

文章目录 一、 线程概念1. 什么是线程2. 线程的优点3.线程的缺点4. 线程异常5. 线程用途 二、 Linux进程VS线程1. 进程和线程2. 进程和线程的地址空间3. 进程和线程的关系 三、Linux线程控制1. POSIX线程库2. 线程创建3. 线程ID及进程地址空间布局4. 线程终止5. 线程等待6. 线程…

【网络取证箱】网络取证在线分析工具箱

【网络取证箱】网络取证在线分析工具箱 在线网站查询工具箱,没什么介绍的,所见即所得,在本文档里补充了其它一些网络安全资源,请忽用于非法活动,仅供学习研究—【蘇小沐】 (一)Whois查询 主要…

unbantu Apache的基本配置与配置静态资源访问

目录 前言: 1.Apache介绍 2.安装Apache 3. 测试Apache服务是否启动成功 3.1配置Servername 3.2重启服务 4.配置Apache主页面 5. 配置静态的资源 6.为静态资源设置访问权限(基于源地址) 致谢: 前言: 此博客是基于unbantu的Apache服务的详细解析,在这片博…

FPGA - AXI4_Lite(实现用户端与axi4_lite之间的交互逻辑)

在之前的博客中对AXI4总线进行了介绍(FPGA-AXI4接口协议概述),在这篇博客中,实现用户端与axi4_lite之间的交互逻辑。 一, AXI4 1.1 AXI4 介绍 对AXI4总线简单介绍(具体可见FPGA-AXI4接口协议概述&#…

.NET开源、免费、强大的交互式绘图库

前言 今天大姚给大家分享一款.NET开源(采用MIT许可证)、免费、强大的交互式绘图库,该库能够轻松地实现大型数据集的交互式显示。使用几行代码即可快速创建折线图、柱状图、饼图、散点图等不同类型的图表:ScottPlot。 ScottPlot类…

Django 中 null=True 和 blank=True 的作用

Django 中 null=True 和 blank=True 的作用 在 Django 模型中,null=True 和 blank=True 两个参数用于控制数据库字段和表单字段的行为。 null=True 数据库字段: 允许该字段存储空值 (NULL)。表单字段: 允许在提交表单时不填写该字段。示例: class MyModel(models.Model):na…