`
zds420
  • 浏览: 203741 次
  • 性别: 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();
	}
}
 
分享到:
评论

相关推荐

    jdbc-批量插入数据

    本文将深入探讨如何使用JDBC进行批量插入数据,这在处理大量数据时能显著提高性能。 批量插入数据是数据库操作中常见的一种优化策略,特别是在数据分析、数据迁移或大数据处理等场景。传统的单条插入方式可能会导致...

    Spring+JDBC实例

    在JDBC实例中,我们可以使用@Transactional注解声明方法需要在事务中执行,Spring会自动管理事务的开始、提交和回滚。 3. **JdbcTemplate方法**:JdbcTemplate提供了一系列的方法来执行SQL,如`update()`用于执行...

    Jdbc第五章数据库实例

    **JDBC第五章数据库...总结,JDBC第五章的数据库实例是学习JDBC应用的重要环节,涵盖了从连接数据库、执行SQL语句到处理结果集、事务控制等多个方面。掌握这些内容将为开发高效、稳定的Java数据库应用打下坚实基础。

    jdbc 编程实例

    在“JDBC编程实例”中,可能会涵盖如何使用JDBC连接MySQL数据库,执行基本的CRUD操作,处理批量操作,以及事务管理和连接池的使用。这些实例有助于巩固理论知识,并为实际项目提供实践指导。 总结,JDBC是Java...

    jdbc连接各数据库及事务处理

    2. 批量处理:使用`Statement`或`PreparedStatement`的`addBatch()`和`executeBatch()`方法进行批量SQL操作,减少网络通信次数。 3. 数据库连接池:通过连接池管理数据库连接,避免频繁创建和关闭连接,提高系统效率...

    JDBC 数据库链接数 据库链接操作实例

    它允许Java应用程序通过编写Java代码来访问和处理存储在关系数据库中的数据。本实例主要关注如何使用JDBC进行数据库链接操作,我们将深入探讨JDBC的核心概念、数据库连接步骤以及在实际应用中的注意事项。 首先,...

    SpringJDBC批量处理数据代码示例

    在Java开发中,Spring JDBC是Spring...总的来说,Spring JDBC提供了强大的批量处理能力,通过`NamedParameterJdbcTemplate`的`batchUpdate`方法,我们可以轻松地实现数据的批量插入和更新,有效提升数据库操作的效率。

    spring jdbc 实例源码

    在这个实例源码中,我们看到的是一个基于`epet`宠物项目的完整实现,该项目可能包括了创建、查询、更新和删除(CRUD)数据库记录的操作。这个项目不仅包含了源代码,还预设了完整的数据库,因此非常适合学习和理解...

    spring_JDBC整合包

    4. **JdbcTransactionManager**: 这是Spring提供的事务管理器,它利用JDBC的API来管理事务,支持编程式和声明式事务控制。 5. **DataSource**: Spring JDBC通常与DataSource一起使用,DataSource是Java的JNDI服务的...

    JDBC编程实例.rar

    本教程将深入探讨JDBC编程实例,通过具体的代码示例帮助你理解和掌握JDBC的核心概念和用法。 ### 1. JDBC基础 - **JDBC驱动类型**:JDBC驱动分为四种类型,分别是Type 1、Type 2、Type 3和Type 4。其中,Type 4...

    sqljdbc42 jdbc for java

    本文将深入探讨SQLJDBC42 JDBC驱动程序的特性和使用方法,帮助开发者更好地理解和应用这一强大的工具。 一、SQLJDBC42简介 SQLJDBC42是微软SQL Server数据库与Java应用程序之间的桥梁,它实现了Java Database ...

    Spring与JDBC整合

    - 深入理解Spring JDBC的源码,可以发现它对JDBC的优化主要体现在批处理、结果集处理和事务控制等方面。 - JdbcTemplate通过PreparedStatementCreator和RowCallbackHandler等接口,实现了SQL的动态生成和结果的...

    sqlserver jdbc jar

    6. **事务管理**:JDBC支持事务处理,可以使用`Connection`的`setAutoCommit(false)`来手动控制事务,然后通过`commit()`和`rollback()`来提交或回滚事务。 SQL Server JDBC驱动还提供了高级特性,如批量操作、...

    sqljdbc.jar

    4. **事务管理**:支持开始、提交、回滚事务,确保数据的一致性和完整性。 5. **批处理**:使用`BatchUpdateException`批量执行多条SQL语句,提高效率。 6. **游标**:通过设置不同的游标类型,控制数据的读取方式,...

    JDBC Recipes

    "JDBC Recipes"这本书通过实例解析,详细讲解了这些JDBC技术点,为开发者提供了实际场景下的解决方案,帮助他们在项目开发中更好地利用JDBC进行数据库操作。书中的"Problem-Solution"方法论使得学习更为直观,适合...

    Spring JDBC相关jar包:spring_jdbc_4.0.0.zip

    Spring JDBC是Spring框架的一个核心模块,它为Java数据库连接(JDBC)提供了一种抽象层,使得开发者可以更轻松地处理数据库操作。Spring JDBC模块的主要目标是减少对JDBC API的直接依赖,通过提供一种更加高级、易于...

    Microsoft SQL Server 2005 JDBC Driver

    9. **异常处理**:当发生错误时,JDBC驱动会抛出SQLException,便于开发者捕获和处理。 10. **兼容性**:除了与SQL Server 2005兼容外,也适用于后续版本的SQL Server,如2008、2012等。 在实际开发中,要使用...

    jdbc_data.rar

    JDBC是Java编程语言中用于访问和处理数据库的标准接口,它允许程序员执行SQL语句并处理返回的结果。 在描述中提到的“jdbc学习数据库建立sql”,我们可以推测这个压缩包是为了教学或实践目的,它可能包含了创建、...

    JDBC数据访问技术.rar

    总结来说,JDBC是Java开发中与数据库交互的核心技术,它提供了丰富的API用于数据库连接、SQL执行、事务管理和异常处理。在实际项目中,通过JavaBean和JSP的结合,可以构建高效的数据访问层,实现CRUD操作,并通过...

    JDBC.rar_jdbc

    9. **事务管理**:JDBC支持事务处理,通过`Connection`对象的`setAutoCommit(false)`来开启手动提交事务,`commit()`提交事务,`rollback()`回滚事务。 10. **批处理**:批量处理SQL语句可以提高效率。`Statement`...

Global site tag (gtag.js) - Google Analytics