批处理的错误处理
联机丛书中关于批处理的介绍已经很清晰了,摘录如下:
引用
批处理是包含一个或多个 Transact-SQL 语句的组,从应用程序一次性地发送到SQL Server执行。SQL Server 将批处理语句编译成一个可执行单元,此单元称为执行计划。执行计划中的语句每次执行一条。
编译错误(如语法错误)使执行计划无法编译,从而导致批处理中的任何语句均无法执行。
运行时错误(如算术溢出或违反约束)会产生以下两种影响之一:
大多数运行时错误将停止执行批处理中当前语句和它之后的语句。少数运行时错误(如违反约束)仅停止执行当前语句。而继续执行批处理中其它所有语句。
在生成错误的批处理、存储过程或触发器中,@@ERROR 是唯一可用部分。@@ERROR用来标记SQL语句的执行状况。@@ERROR=0,表示执行成功,否则,表示执行错误。由于 @@ERROR 在每一条语句执行后被清除并且重置,应在语句执行后立即检查它。
错误的所有其它部分,都只返回到那些能够用 API 错误处理机制进行错误处理的应用程序中。
关于上述说明的含义如下:
对于SQLServer服务器而言,虽然对于批处理执行过程中的语句错误情况,服务器已返回足够的错误信息。但SQLServer2000的T-SQL语言并没有提供类似Java的Try catch机制来捕获和处理这些错误。T-SQL需要用户在每一条语句执行后通过@@error来判断是否有语句执行错误。或者是在开启事务的情况下,打开XACT_ABORT开关,这样,当批处理中任意语句出现错误时,都将停止所有后续语句的执行并回滚事务。
对于JDBC程序而言,底层的数据库驱动在得到错误消息返回时,会产生并抛出SQLException异常。XACT_ABORT开关的状态不影响事务正确的被提交或者回滚。
联机丛书的说明如下(但还有些疑惑?):
引用
对于大多数 OLE DB 提供程序(包括 SQL Server),隐性或显式事务中的数据修改语句必须将 XACT_ABORT 设置为 ON。唯一不需要该选项的情况是提供程序支持嵌套事务时。
SET XACT_ABORT { ON | OFF }指定当 Transact-SQL 语句产生运行时错误时,SQL Server是否自动回滚当前事务。当 SET XACT_ABORT 为 ON 时,如果 Transact-SQL 语句产生运行时错误,整个事务将终止并回滚。为 OFF 时,只回滚产生错误的 Transact-SQL 语句,而事务将继续进行处理。
比如对于下面的SQL语句:
insert into cat values('11', 'aaa')
insert into cat values(null, 'bbb')//违反约束
insert into cat values('33', 'ccc')
GO
SQL查询分析器返回:
引用
(所影响的行数为 1 行)
服务器: 消息 515,级别 16,状态 2,行 1
无法将 NULL 值插入列 'id',表 'test.dbo.cat';该列不允许空值。INSERT 失败。
语句已终止。
(所影响的行数为 1 行)
而对于JDBC程序,第2条SQL语句将导致抛出异常:
public static void main(String[] args) throws Exception {
Properties info = new Properties();
info.put(Messages.get(Driver.BATCHSIZE), 30);
info.put("USER", "sa");
info.put("PASSWORD", "");
Connection conn = null;
Statement stmt = null;
try {
Class.forName("net.sourceforge.jtds.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:jtds:sqlserver://localhost:1433/test", info);
conn.setAutoCommit(false);
stmt = conn.createStatement();
stmt.addBatch("insert into cat values('11', 'aaa')");
stmt.addBatch("insert into cat values(null, 'bbb')");
stmt.addBatch("insert into cat values('33', 'ccc')");
stmt.executeBatch();
conn.commit();
} catch (Exception e) {
e.printStackTrace();
if (conn != null) conn.rollback();
} finally {
if (stmt != null) stmt.close();
if (conn != null) conn.close();
}
}
java.sql.Statement.executeBatch()的API说明如下:
引用
int[] executeBatch() throws SQLException将一批命令提交给数据库来执行,如果全部命令执行成功,则返回更新计数组成的数组。
如果批量更新中的命令之一无法正确执行,则此方法抛出 BatchUpdateException,并且 JDBC 驱动程序可能继续处理批处理中的剩余命令,也可能不执行。无论如何,驱动程序的行为必须与特定的 DBMS 一致,要么始终继续处理命令,要么永远不继续处理命令。
- 大小: 22.9 KB
分享到:
相关推荐
### SQL Server 数据库基础知识与操作指南 #### 一、创建数据库 在 SQL Server 中创建数据库是一项基础但重要的技能。以下是一些关键步骤和语法示例: ```sql CREATE DATABASE ckgl ON PRIMARY ( -- 创建第一个...
### SQL Server 数据库操作知识点详解 #### 一、SQL Server 的安装与配置 **1. 安装步骤:** - **准备阶段:** 首先确保安装环境中满足SQL Server的最低硬件要求,并且操作系统兼容。 - **安装介质:** 获取SQL ...
笔记是本人学习SQLServer一段时间后重新整理出来的,适合有一些入门基础的人学习。 ├─01 安装及使用 │ SQLServer2005安装及使用.txt │ ├─02 常用函数 │ function.sql ... Sqlserver数据库总结.sql
这份"sql server数据库笔记.zip"包含了两个子文件,分别是"sql server数据库笔记01.enex"和"sql server数据库笔记02.enex",很可能记录了关于SQL Server的重要概念、操作技巧和实践经验。 首先,SQL(Structured ...
在SQL Server数据库的基础学习中,理解并掌握各个系统数据库的功能至关重要。首先,master数据库是整个SQL Server的核心,它存储了所有系统级别的信息,包括用户数据库的控制信息、账户设置、环境变量以及系统错误...
二、SQL Server数据库系统 SQL Server是微软公司的产品,同样具有广泛的应用场景: 1. **T-SQL**:SQL Server使用Transact-SQL作为其扩展的SQL语言,支持事务处理和复杂的业务逻辑。 2. **SSMS(SQL Server ...
《SQL Server数据库技术大全:5小时多媒体视频讲解》是一份深度探讨SQL Server数据库技术的教程,旨在通过实例教学,帮助读者快速理解和掌握SQL Server的核心功能和高级特性。本教程覆盖了从基础操作到复杂查询、...
SQL Server 作为一个关系型数据库管理系统,涉及到一些专业术语。以下是几个常见的 SQL Server 专业术语的解释: 数据库(Database): 在 SQL Server 中,数据库是一个包含相关数据和对象的容器。它是数据的集合,...
SQL Server 数据库学习笔记 SQL Server 是一种关系数据库管理系统,由 Microsoft 公司开发。它使用 Transact-SQL(T-SQL)语言来管理和操作数据库。本文将对 SQL Server 数据库的基本操作进行总结,涵盖创建数据库...
SQLserver 数据库学习笔记 欢迎大家下载学习,共同进步啊
本人自学数据库精华笔记,学习课程是任何一个知识点都不敢遗漏,方便软件开发过程中查阅和学习。主要内容是T-sql和sqlserver数据库知识。希望下载了的小童鞋能耐心学习。
《SQL Server精华 (CHM)_sqlserver_SQLServer笔记_》是一部综合性的SQL Server学习资源,旨在帮助用户深入理解和掌握Microsoft SQL Server数据库管理系统的核心概念、功能和最佳实践。这部笔记涵盖了一系列关键知识...
SQL Server 是 Microsoft 开发的一款关系数据库管理系统(RDBMS),它提供了广泛的功能和工具,以满足企业级数据库管理的需求。本文档提供了 SQL Server 的官方帮助文档,涵盖了从安装到部署、管理、安全和优化等...
SQL Server 2008是微软推出的一款关系型数据库管理系统,具有强大的数据处理能力和稳定性。在维护和优化SQL Server 2008时,我们需要注意以下几个关键知识点: 1. **RAID配置**: - RAID10:提供高读写速度和数据...
在本文中,我们将深入探讨SQL Server的学习笔记,涵盖其体系结构、数据库类型特点、OLTP与OLAP的区别,以及一些关键的管理工具。 首先,让我们了解Microsoft SQL Server 2008系统的体系结构。这个系统由四个主要...
本笔记主要针对SQL Server的语法进行整理,旨在帮助初学者快速掌握基础概念和常用操作。 一、SQL简介 SQL(Structured Query Language)是用于管理和处理关系数据库的标准语言。在SQL Server中,你可以创建、更新、...
通过对SQL Server查询和索引的优化,不仅可以显著提升数据库的性能,还能有效降低系统的运行成本。实践证明,合理的SQL编写习惯与良好的索引管理策略是实现这一目标的关键。此外,定期审查并调整现有的SQL脚本与索引...
c#课程设计连接sqlserver数据库,笔记本,存储修改文字图片等_NoteBookIteration
### SQL Server 2012 性能学习笔记 #### SQL Server 2012 新特性及简介 SQL Server 2012 是微软推出的一个重要版本,它引入了许多新特性和改进,旨在提高数据库系统的可用性、安全性、可管理性以及性能。以下是几...
5. SQLServer数据库:Microsoft的SQLServer是另一种流行的数据库系统,尤其在Windows环境和.NET生态系统中广泛应用。SQLServer同样支持JDBC,使得Java开发者可以轻松地在Java应用中集成和管理数据。 学习这个笔记,...