SQLServer数据库笔记(三)
批处理的错误处理
联机丛书中关于批处理的介绍已经很清晰了,摘录如下:
insert into cat values('11', 'aaa')insert into cat values(null, 'bbb')//违反约束insert into cat values('33', 'ccc')GO
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 一致,要么始终继续处理命令,要么永远不继续处理命令。