1. SQLException 的概述

当使用 JDBC 与数据源(在本文中的数据源表示我们实际使用的数据库)进行交互的时候遇见错误的时候,将会抛出名为 SQLException 的异常。一个 SQLException 的异常里面包含以下信息,用于帮助我们更好的定位错误。

  1. 错误表示:

    使用 getMessage 方法便可以获取。
  2. SQLState 代码

    代码有五位的字母和数字组成 。多数的代码由 ISO/ANSI 和 Open Group(X/Open) 标准化,但是仍然存在部分的代码由数据库提供商自行实现。

    使用 getSQLState 方法便可以获取。
  3. 错误代码

    与 SQLState 不同,错误代码是由数据库提供商自行定义的整数值,存在是由基础数据源返回的实际错误代码的可能。

    使用 getErrorCode 方法便可以获取。
  4. 错误原因

    表示引发异常的原因,通过不断调用 getCause 方法可以获取异常发生的底层原因。
  5. 异常链

    如果出现多个错误,则通过此链引用异常。

    使用 getNextException 方法便可以获取。

2. SQLException的示例

public static void printSQLException(SQLException e){
for(Throwable e :ex){
if (e instanceof SQLException){
if(ignoreSQLException(((SQLException)e).getSQLState()) == false){
e.printStackTrace(System.err);
System.err.println("SQLState:" + ((SQLException)e).getSQLState());
System.err.println("Error Code:" + ((SQLException)e).getErrorCode());
System.err.println("Message:" + e.getMessage());
Throwable t = ex.getCause();
while(t != null){
System.out.println("Cause :" + t);
t = t.getCause();
}
}
}
}
} public static boolean ignoreSQLException(String sqlState){
if(sqlState == null){
System.out.println("The SQL state is not defined");
} // X0Y32:Jar file already exists in schema
if(sqlState.equalsIgnoreCase("X0Y32")){
return true;
} // 42Y55:Table already exists in schema
if(sqlState.equalsIgnoreCase("42Y55")){
return true;
} return true;
}

说明:上面的代码取自 [http:docs.oracle.com] (http://docs.oracle.com/javase/tutorial/jdbc/basics/sqlexception.html)。

3. SQLWarning

SQLWarning 是 SQLException 的一个非常重要的子类,用于表示数据库访问时出现的警告。作为异常,SQLWarning 不会停止执行应用程序,而是提醒用户没有按计划发生任何事情。比如,警告有可能会通知你尝试撤销的某个权限没有成功,或者通知你在请求断开的时间可能发生错误。

SQLWarning 有可能被 Connection 、Statement (包括 PreparedStatement 和 CallableStatement)或 ResultSet 报告,这些类都存在 getWarnings 方法,通过调用该方法才能看到调用对象上报告的第一个警告。如果 getWarning 返回一个警告,我们可以调用其 getNextWarning 方法获取下一个警告。每执行一行语句,那么前面那行语句的警告将会清除,这意味着如果我们想要检索报告处理来的警告,那么必须在下一行语句执行之前检索。

DataTruncation 是最常见的警告,其SQLState代码均为01004,表示在读取和写入数据的时候存在问题。DataTruncation 有很多方法可以帮助我们去理解哪个列或参数数据被截断,截断是在读取还是写入操作,应该传输多少字节以及实际传输的字节数。

4. 其他类型的SQLException

  1. BatchUpdateException:在批处理更新操作期间发生错误时,将引发除了所提供的信息,提供的更新计数被处死之前出现了错误的所有语句。
  2. SQLClientInfoException:当无法在连接上设置一个或多个客户端信息属性时引发。除了所提供的信息,也提供了不设置的客户端信息属性的列表。
  3. so on...

JDBC学习笔记之SQLException介绍的更多相关文章

  1. JDBC 学习笔记(十一)—— JDBC 的事务支持

    1. 事务 在关系型数据库中,有一个很重要的概念,叫做事务(Transaction).它具有 ACID 四个特性: A(Atomicity):原子性,一个事务是一个不可分割的工作单位,事务中包括的诸操 ...

  2. JDBC 学习笔记(十)—— 使用 JDBC 搭建一个简易的 ORM 框架

    1. 数据映射 当我们获取到 ResultSet 之后,显然这个不是我们想要的数据结构. 数据库中的每一个表,在 Java 代码中,一定会有一个类与之对应,例如: package com.gerrar ...

  3. JDBC 学习笔记(六)—— PreparedStatement

    1. 引入 PreparedStatement PreparedStatement 通过 Connection.createPreparedStatement(String sql) 方法创建,主要用 ...

  4. JDBC学习笔记二

    JDBC学习笔记二 4.execute()方法执行SQL语句 execute几乎可以执行任何SQL语句,当execute执行过SQL语句之后会返回一个布尔类型的值,代表是否返回了ResultSet对象 ...

  5. JDBC学习笔记一

    JDBC学习笔记一 JDBC全称 Java Database Connectivity,即数据库连接,它是一种可以执行SQL语句的Java API. ODBC全称 Open Database Conn ...

  6. HTML+CSS学习笔记(1) - Html介绍

    HTML+CSS学习笔记(1) - Html介绍 1.代码初体验,制作我的第一个网页 <!DOCTYPE HTML> <html> <head> <meta ...

  7. Typescript 学习笔记一:介绍、安装、编译

    前言 整理了一下 Typescript 的学习笔记,方便后期遗忘某个知识点的时候,快速回忆. 为了避免凌乱,用 gitbook 结合 marketdown 整理的. github地址是:ts-gitb ...

  8. cocos2d-x入门学习笔记,主要介绍cocos2d-x的基本结构,并且介绍引擎自带的示例

    cocos2d-x 3.0 制作横版格斗游戏 http://philon.cn/post/cocos2d-x-3.0-zhi-zuo-heng-ban-ge-dou-you-xi http://blo ...

  9. InterSystems Ensemble学习笔记(一) Ensemble介绍及安装

    系列目录 InterSystems Ensemble学习笔记(一) Ensemble介绍及安装InterSystems Ensemble学习笔记(二) Ensemble创建镜像, 实现自动故障转移 一 ...

随机推荐

  1. docker私有仓库-https+nginx

    一.概述 使用的是registry-2.4版本,因为在这个版本开始提供了garbage-collect,能够清理掉blobs,2.1开始提供了api的删除功能,但是只是删除的index并没有释放掉磁盘 ...

  2. php使用memcached缓存总结

    1. 查询多行记录,以sql的md5值为key,缓存数组(个人觉得最好用的方法) $mem = new Memcache(); $mem->connect('127.0.0.1',11211); ...

  3. Python机器学习笔记:深入学习Keras中Sequential模型及方法

    Sequential 序贯模型 序贯模型是函数式模型的简略版,为最简单的线性.从头到尾的结构顺序,不分叉,是多个网络层的线性堆叠. Keras实现了很多层,包括core核心层,Convolution卷 ...

  4. C#检测是否联网

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.R ...

  5. ppt提取文字

    ALT+F11调出开发窗口 加入引用 插入模块 输入代码运行 Sub Main() On Error Resume Next Dim temp As New Word.Document, tmpSha ...

  6. C#---初学ActiveMQ中间件

    本篇文章只适合跟我一样的初学者,因为现阶段的我们只想者怎么实现功能,不太会去考虑潜在异常.从上周开始优化公司的调控系统,原先采取的都是通过操作数据库去实现功能,客户体验效果不佳,经过领导决定是用中间件 ...

  7. jQuery合并同一列中相同文本的相邻单元格

    一.效果图 二.在html的head中引入jQuery <script language="javascript" src="${pageContext.reque ...

  8. spring boot 之 Mybatis 配置

    ############################## mybatis配置 ######################################mybatis.configuration ...

  9. 解决Linux服务器tomact-8.0启动慢的问题

    环境信息: CentOS release 6.8 tomcat-8.0 JDK1.8 一.启动tomcat #sh /root/tomcat-8.0/bin/startup.sh #tailf /ro ...

  10. linux学习笔记-软件包的相关知识

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 一.软件包种类 1.源码包 源码包即提供源代码的发行包 2.二进制包 二进制包即提供二进制文件的发行包 安装方法查找二进制包官网 ...