java_第一年_JDBC(3)

事务

我们在通过JDBC连接数据库并开始交互时,默认情况下是自动提交的,有时由于为了保持业务流程的完整性、提高性能或是使用分布式事务,需要启动支持事务,此时的方法是调用Connection对象的setAutoCommit();传递布尔值false关闭默认自动提交:

conn.setAutoCommit(false);

提交事务:

conn.setAutoCommit();

数据库回滚操作:

conn.rollback();

配合数据库的回滚,我们可以先设置保存点,通过Connection对象的方法setSavepoint(String savepointName)可以定义新的保存点、releaseSavepoint(Savepoint savepointName)可以删除保存点;通过以下实例加深理解:

try{
    conn.setAutoCommit(false);
    stmt = conn.createStatement();
    Savepoint savepoint1 = conn.setSavepoint("DELETED_1");
    String SQL = "DELETE FROM employees WHERE ID =100";
    stmt.executeUpdate(SQL);
    conn.rollback(savepoint1);
    Savepoint savepoint2 = conn.setSavepoint("DELETED_2");
    SQL = "DELETE FROM employees WHERE ID =101";
    stmt.executeUpdate(SQL);
    conn.commit();
}catch(SQLException e){
      e.printStackTrace();
}  

异常

对于JDBC,要处理的异常最常见的是java.sql.SQLException。

发生异常后会将其重定向catch子句中,如果没有相应的catch子句在,则程序的执行会结束。

处理异常有以下方法:

 批量处理SQL语句

需要先使用DatabaseMeteData.supportsBatchUpdates()方法来确认目标数据库是否支持批量处理,若支持则会返回true;

通过交互对象Statement中的addBatch()增加SQL语句,然后通过executeBatch()方法来批量处理,其返回一个整数数组,每个元素是相应更新语句的更新计数;可以使用clearBatch()方法来删除SQL语句,会将所有addBatch()增加的语句都删除,没法删除指定的语句

Statement stmt = conn.createStatement();
conn.setAutoCommit(false);
String SQL = "INSERT INTO employees (id,age,first,last) VALUES(200,30,'ZHAO','XIAO')";
stmt.addBatch(SQL);
String SQL = "INSERT INTO employees (id,age,first,last) VALUES(201,35,'JIA','XIAO')";
stmt.addBatch(SQL);
int[] count = stmt.executeBatch();
conn.commit

猜你喜欢

转载自www.cnblogs.com/lzj-learn/p/11590761.html