Java数据库编程(八)_5.批处理与事物处理

知识点:

1.掌握批处理的操作流程。

2.掌握JDBC中提供的事物操作。

具体内容:

    在之前所使用的全部的数据库操作严格来讲属于JDBC1.0中就规定的操作模式,而最新JDBC是4.0版本,但是很少人使用。但是从JDBC2.0开始增加了一些神奇的功能:可滚动的结果集,可以利用结果集执行增加、更新,删除操作。

    所谓的批处理指的是一次性向数据库发出多条操作命令,一起执行 。如果想使用批处理,主要还是利用Statement与PreparedStatement接口上定义的。

  • Statement接口定义的方法:

                ——增加批处理语句:public void addBatch(String sql) throws SQLExceptio

                ——执行批处理:public int[] executeBatch() throws SQLException

                              ——返回的数组是包含了所有批处理语句的执行结果(比如:增加一行,修改两行,删除两行,返回值就是1,                                       2,2 )

  • PreparedStatement接口定义的方法:

                 ——增加批处理:void addBatch() throws SQLException

范例:执行批处理

package conll;

import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Arrays;

public class TestDemo {
	private static final String DBDEIVER="oracle.jdbc.driver.OracleDriver";
	private static final String DBURL="jdbc:oracle:thin:@localhost:1521:mldn";
	private static final String USER="scoot";
	private static final String PASSWORD="tiger";
	public static void main(String[] args) throws Exception  {
		String keyWord = "";
		Class.forName(DBDEIVER);
		Connection conn =  DriverManager.getConnection(DBURL, USER, PASSWORD);
		Statement stmt = conn.createStatement();
		
		stmt.addBatch("INSERT INTO member(mid,name) VALUES (mysel.nextval,'测试A')");
		stmt.addBatch("INSERT INTO member(mid,name) VALUES (mysel.nextval,'测试B')");
		stmt.addBatch("INSERT INTO member(mid,name) VALUES (mysel.nextval,'测试C')");
		stmt.addBatch("INSERT INTO member(mid,name) VALUES (mysel.nextval,'测试D')");
		stmt.addBatch("INSERT INTO member(mid,name) VALUES (mysel.nextval,'测试E')");
		int result [] = stmt.executeBatch();  //执行批处理
		System.out.println(Arrays.toString(result));
		
		
		conn.close();
	}
}

      如果假设以上五条批处理属于一组关联的操作,如果中间有一条语句执行失败,其他的操作不能实现。

     在批处理操作的过程中,由于JDBC具备自动的事务提交,所以一旦中间的语句出现错误,那么就是错误前的语句正常执行,错误后的语句不执行,这不应该。

     可以使用JDBC提供的事物处理操作来进行手工的事务控制,所有的操作方法都在Connection接口里定义;

  • 事务提交:public void commit() throws SQLException;
  • 事务回滚:public  void rollback() throws SQLException;
  • 设置是否位自动提交:public void setAutoCommit(boolean autoCommit) throws SQLException;

  范例:利用事务处理

package conll;

import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Arrays;

public class TestDemo {
	private static final String DBDEIVER="oracle.jdbc.driver.OracleDriver";
	private static final String DBURL="jdbc:oracle:thin:@localhost:1521:mldn";
	private static final String USER="scoot";
	private static final String PASSWORD="tiger";
	public static void main(String[] args) throws Exception  {
		String keyWord = "";
		Class.forName(DBDEIVER);
		Connection conn =  DriverManager.getConnection(DBURL, USER, PASSWORD);
		Statement stmt = conn.createStatement();
		conn.setAutoCommit(false);
		try{
		stmt.addBatch("INSERT INTO member(mid,name) VALUES (mysel.nextval,'测试A')");
		stmt.addBatch("INSERT INTO member(mid,name) VALUES (mysel.nextval,'测试B')");
		stmt.addBatch("INSERT INTO member(mid,name) VALUES (mysel.nextval,'测试C')");
		stmt.addBatch("INSERT INTO member(mid,name) VALUES (mysel.nextval,'测试D')");
		stmt.addBatch("INSERT INTO member(mid,name) VALUES (mysel.nextval,'测试E')");
		int result [] = stmt.executeBatch();  //执行批处理
		System.out.println(Arrays.toString(result));
		conn.commit();   //如果没有错误进行提交
		} catch(Exception e){
			e.printStackTrace();
			conn.rollback(); //如果出现异常,则进行回滚
		}
		
		conn.close();
	}
}

   以上只是岩石一下如何手工处理,而在实际的工作上,这些操作意义不大。意义不大指的是日后会有容器帮助我们自动处理,不用手动处理。

总结:要掌握批处理的执行操作。Connection接口定义了事务处理方法:setAutoCommit()、commit()、rollback().

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值