`
zds420
  • 浏览: 198629 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

JDBC批量处理和事务实例

    博客分类:
  • JDBC
 
阅读更多

优势:1.节省传递时间。 2.并发处理。

PreparedStatement:
1) addBatch()将一组参数添加到PreparedStatement对象内部。
2) executeBatch()将一批参数提交给数据库来执行,如果全部命令执行成功,则返回更新计数组成的数组。
Statement:
1) addBatch(String sql)方法会在批处理缓存中加入一条sql语句。
2) executeBatch()执行批处理缓存中的所有sql语句。
注意:PreparedStatement中使用批量更新时,要先设置好参数后再使用addBatch()方法加入缓存。批量更新中只能使用更改、删除或插入语句。


1.数据库的事务:
 事务的ACID属性
 * 原子性(Atomicity) 原子性是指事务是一个不可分割的工作单 位,事务中的操作要么都发生,要么都不发生。?
 * 一致性(Consistency) 事务必须使数据库从一个一致性状态变 换到另外一个一致性状态。(数据不被破坏)
 * 隔离性(Isolation) 事务的隔离性是指一个事务的执行不能被 其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他 事务是隔离的,并发执行的各个事务之间不能互相干扰。
 * 持久性(Durability) 持久性是指一个事务一旦被提交,它对数 据库中数据的改变就是永久性的,接下来的其他操作和数据库故障 不应该对其有任何影响





package com.saas.jdbc;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Calendar;

public class TestTransactionDemo01 {

	public static String _STR=" PreparedStatement:  1.addBatch() 将一组参数添加到 PreparedStatement对象内部  2.executeBatch() 将一批参数提交给数据库来执行,如果全部命令执行成功,则返回更新计数组成的数组。*  ";

	public static String _URL="jdbc:mysql://127.0.0.1:3306/shopping_thpad_com?useUnicode=true&characterEncoding=UTF-8&useOldAliasMetadataBehavior=true";
	
	public static String _LOGIN_NAME="root";
	
	public static String _LOGIN_PASSWORD="123456";
	
	private static Connection connect = null;
	
	private PreparedStatement pstmt=null;
	
	private ResultSet rs = null;
	
	public static Connection getConnection() {
		try{
			Class.forName("com.mysql.jdbc.Driver");
		}
		catch(ClassNotFoundException e) {
			e.printStackTrace();
		}
		
		
		try {
			connect = DriverManager.getConnection(_URL, _LOGIN_NAME, _LOGIN_PASSWORD);	
		}
		catch(SQLException e) {
			e.printStackTrace();
		}
		return connect;
		
	}
	
	public void execInsert() {
		connect = getConnection();
		//添加
		String insert_sql ="insert into item_spec(item_spec_id,name,remarks) values(?,?,?)";
		try {
			connect.setAutoCommit(false);//事务开始,默认设置为false,表示不自动提交
			Calendar cal =	Calendar.getInstance();
		 	pstmt= connect.prepareStatement(insert_sql);
		 	pstmt.setString(1,String.valueOf(cal.getTimeInMillis()));
		 	pstmt.setString(2, _STR);
		 	pstmt.setString(3, "test333333333");
		 	//pstmt.executeUpdate();
		 	pstmt.addBatch();
		 	Calendar cal1 =	Calendar.getInstance();
		 	pstmt.setString(1,String.valueOf(cal1.getTimeInMillis()+2));
		 	pstmt.setString(2, "test_zhudansheng");
		 	pstmt.setString(3, "test_zhudansheng_3333333");
		 	pstmt.addBatch();
		 	Calendar cal2 =	Calendar.getInstance();
		 	pstmt.setString(1,String.valueOf(cal2.getTimeInMillis()+3));
		 	pstmt.setString(2, "g_test");
		 	pstmt.setString(3, "test_zhudansheng_test");
		 	
		 	pstmt.addBatch();
		 	pstmt.executeBatch();	//	执行批量处理语句。
		 	connect.commit();//执行事务
		 	System.out.println("提交事务成功");
		 	
		 	connect.setAutoCommit(true);
		 	this.doClose();
		}
		catch(SQLException e) {
			e.printStackTrace();
			
			try {
				if(!connect.isClosed()) {
					connect.rollback();
					System.out.println("提交事务失败");
				 	
					connect.setAutoCommit(true);
				}
			}
			catch(SQLException ee)  {
				ee.printStackTrace();
			}
			
		}
		finally {
			// 抛出异常则关闭所有链接
			this.doClose();
		}
	}
	
	public void execStatement() {
		connect = getConnection();
		
		String result_sql = "select * from item_spec ";//where item_spec_id=?
		
		try {
			pstmt = connect.prepareStatement(result_sql);
			//pstmt.setString(1, "1319729859937");
			rs = pstmt.executeQuery();
			
			while(rs.next()) {
				System.out.println(rs.getString("item_spec_id")+"-----------"+rs.getString("name")+"---------------"+rs.getString("remarks"));
			}
		}
		catch(SQLException e) {
			e.printStackTrace();
		}
		finally {
			 this.doClose();
		}
	}
	
	public void execUpdate() {
		connect = getConnection();
		
		String update_sql ="update item_spec set name=?,remarks=? where item_spec_id=?";
		
		try {
			PreparedStatement pstmt = connect.prepareStatement(update_sql);
			pstmt.setString(1, "zhudansheng");
			pstmt.setString(2, "remarks ssstaskdflasdjfjasdfkljasdaskfjaafkjas手放开垃圾生大幅就 ");
			pstmt.setString(3, "1319125327157");
			int i_flag=pstmt.executeUpdate();
			System.out.println("更新为:"+i_flag);
		}
		catch(SQLException e) {
			e.printStackTrace();
		}
		finally{
			this.doClose();
		}
	}
	
	/**
	 * 
	 */
	public void execDelete() {
		connect = getConnection();
		String delete_sql ="delete from item_spec where item_spec_id=?";
		try {
			PreparedStatement pstmt = connect.prepareStatement(delete_sql); 
			pstmt.setString(1, "1319122161343");
			int i_flag=pstmt.executeUpdate();
			System.out.println("删除为:"+i_flag);
		}
		catch(SQLException e) {
			e.printStackTrace();
		}
		finally{
			this.doClose();
		}
	}
	
	public void doClose() {
		try {
			if(null!=rs) {
				rs.close();
				rs=null;
			}
			if(null!=pstmt) {
				pstmt.close();
				pstmt=null;
			}
			if(null!=connect) {
				connect.close();
				connect=null;
			}
				
		}
		catch(SQLException e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[]args) {
		TestTransactionDemo01 test = new TestTransactionDemo01();
		test.getConnection();
		test.execInsert();
		//test.execStatement();
		//test.execUpdate();
		//test.execDelete();
		test.doClose();
	}
}
 
分享到:
评论

相关推荐

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    全书分5篇24章,共计603个实例和603个经验技巧。每个实例都是经过笔者精心筛选的,具有很强的实用性,其中一些实例是开发人员难于寻觅的解决方案。 本书两卷共计1200个例子,包括了开发中各个方面最常用的实例,是...

    JAVA上百实例源码以及开源项目源代码

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

    Java数据库编程宝典2

    第1部分 介绍数据库、SQL和JDBC 第1章 关系型数据库 1.1 理解关系型数据库管理系统 1.1.1 关系模型 1.1.2 Codd法则 1.1.3 表、行、列和关键字 1.1.4 主键 1.1.5 外键 1.1.6 关系 1.1.7 视图 1.1.6 范式...

    Java数据库编程宝典4

    第1部分 介绍数据库、SQL和JDBC 第1章 关系型数据库 1.1 理解关系型数据库管理系统 1.1.1 关系模型 1.1.2 Codd法则 1.1.3 表、行、列和关键字 1.1.4 主键 1.1.5 外键 1.1.6 关系 1.1.7 视图 1.1.6 范式...

    Java数据库编程宝典1

    第1部分 介绍数据库、SQL和JDBC 第1章 关系型数据库 1.1 理解关系型数据库管理系统 1.1.1 关系模型 1.1.2 Codd法则 1.1.3 表、行、列和关键字 1.1.4 主键 1.1.5 外键 1.1.6 关系 1.1.7 视图 1.1.6 范式...

    Java数据库编程宝典3

    第1部分 介绍数据库、SQL和JDBC 第1章 关系型数据库 1.1 理解关系型数据库管理系统 1.1.1 关系模型 1.1.2 Codd法则 1.1.3 表、行、列和关键字 1.1.4 主键 1.1.5 外键 1.1.6 关系 1.1.7 视图 1.1.6 范式...

    Spring.3.x企业应用开发实战(完整版).part2

    10.5.2 Hibernate+Spring JDBC混合框架的事务管理 10.6 特殊方法成漏网之鱼 10.6.1 哪些方法不能实施Spring AOP事务 10.6.2 事务增强遗漏实例 10.7 数据连接泄漏 10.7.1 底层连接资源的访问问题 10.7.2 Spring JDBC...

    Spring3.x企业应用开发实战(完整版) part1

    10.5.2 Hibernate+Spring JDBC混合框架的事务管理 10.6 特殊方法成漏网之鱼 10.6.1 哪些方法不能实施Spring AOP事务 10.6.2 事务增强遗漏实例 10.7 数据连接泄漏 10.7.1 底层连接资源的访问问题 10.7.2 Spring JDBC...

    JAVA上百实例源码以及开源项目

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

    Java数据编程指南

    在本书中,我们将研究Java用于访问和处理数据的各种技术。本书将向读者介绍如何使用Java开发企业级的分布式应用程序,其中涉及生成、处理、存储、 与检索各种类型的数据与不同的数据库。 本书按照一定的逻辑顺序...

    Hibernate实战(第2版 中文高清版)

     10.1.1 数据库和系统事务   10.1.2 Hibernate应用程序中的事务   10.1.3 使用Java Persistence的事务   10.2 控制并发访问   10.2.1 理解数据库级并发   10.2.2 乐观并发控制   10.2.3 获得额外的隔离...

    Spring中文帮助文档

    11.4. JDBC批量操作 11.4.1. 使用JdbcTemplate进行批量操作 11.4.2. 使用SimpleJdbcTemplate进行批量操作 11.5. 通过使用SimpleJdbc类简化JDBC操作 11.5.1. 使用SimpleJdbcInsert插入数据 11.5.2. 使用...

    Spring API

    11.4. JDBC批量操作 11.4.1. 使用JdbcTemplate进行批量操作 11.4.2. 使用SimpleJdbcTemplate进行批量操作 11.5. 通过使用SimpleJdbc类简化JDBC操作 11.5.1. 使用SimpleJdbcInsert插入数据 11.5.2. 使用...

    Hibernate+中文文档

    19.1.4. 实例化集合和代理(Initializing collections and proxies) 19.1.5. 使用批量抓取(Using batch fetching) 19.1.6. 使用子查询抓取(Using subselect fetching) 19.1.7. 使用延迟属性抓取(Using lazy...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    19.1.4. 实例化集合和代理(Initializing collections and proxies) 19.1.5. 使用批量抓取(Using batch fetching) 19.1.6. 使用子查询抓取(Using subselect fetching) 19.1.7. 使用延迟属性抓取(Using lazy...

    HibernateAPI中文版.chm

    19.1.4. 实例化集合和代理(Initializing collections and proxies) 19.1.5. 使用批量抓取(Using batch fetching) 19.1.6. 使用子查询抓取(Using subselect fetching) 19.1.7. 使用延迟属性抓取(Using lazy...

Global site tag (gtag.js) - Google Analytics