`
zl378837964
  • 浏览: 189687 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

简单测试Jdbc批量操作对比

    博客分类:
  • java
阅读更多
总是使用框架等等,都是封装好的操作,好久没用JDBC直接操作了;
今天没事测试了一下Batch和直接操作差别有多大;
仅是简单对比而已罢了:

不说了看结果...
@Test
public void testJDBCBatch() throws Exception{ 
		
final ApplicationContext ac= 
			new ClassPathXmlApplicationContext("pdsu/zhang/jdbcAopDemo/applictionContext.xml");
		// CallBack
      CountTime.getTime(new Handle(){
	public void handler() throws Exception {
		Connection con=ac.getBean("datasource", DataSource.class).getConnection();
		con.setAutoCommit(false);   // 不设置 false 1000运行耗时:703ms :672ms
		PreparedStatement stmt = con.prepareStatement("INSERT INTO student VALUES (?, ?)");
		for(int i=1;i<100000;i++){    // 循环本身 运行耗时:94ms
			stmt.setString(1, "zhangNo."+i);
			stmt.setString(2, "123");
			//stmt.executeUpdate();//100运行耗时:109ms  1000运行耗时:657ms : 672ms
			stmt.addBatch();  	   //100运行耗时:32ms   1000运行耗时:250ms : 219ms  
		}
								stmt.executeBatch(); 				con.commit();
	// 	10000运行耗时:1203ms   100000运行耗时:9406ms
	con.close();
			}
		});	
	}

class CountTime {
	public static void getTime(Handle handle) throws Exception {
		long start =System.currentTimeMillis();
		handle.handler();
		long end =System.currentTimeMillis();
		System.out.println("运行耗时:"+(end-start)+"ms");
	}
}
interface Handle{
	public void handler() throws Exception;
}


下面是简单写了通用计时器;
可见10000条记录运行耗时:1203ms   100000条运行耗时:9406ms  
明显看出耗时比例3:1还大,批量10万条时耗内存一两百M吧;但是和数据库的操作简单利索啊。
下面看一个更有意思的:
	@Test
	public void testJDBCBatch2() throws Exception{ 
	
		final ApplicationContext ac= 
			new ClassPathXmlApplicationContext("pdsu/zhang/jdbcAopDemo/applictionContext.xml");
		CountTime.getTime(new Handle(){
			public void handler() throws Exception {
				Connection con=ac.getBean("datasource", DataSource.class).getConnection();
			con.setAutoCommit(false);  
			PreparedStatement stmt = con.prepareStatement("INSERT INTO student VALUES (?, ?)");
				for(int i=1;i<10000;i++){    
				stmt.setString(1, "zhangNo."+i);
				stmt.setString(2, "123");
				stmt.addBatch();  	  
				}						stmt.executeBatch(); 
				
			stmt.clearBatch();
			for(int i=1;i<10000;i++){ 
			stmt = con.prepareStatement("update student set pwd=?");
			stmt.setString(1, i+"");
			stmt.addBatch();  // 运行耗时:2422ms
				}
			stmt.executeBatch();// 或者 executeUpdate()都行
				
			stmt = con.prepareStatement("update student set pwd=? where name='zhang' ");
			stmt.setString(1, "123");
			stmt.executeUpdate();
				
			con.commit(); 
			con.close();
/**操作	  批量同统一提交	    单个统一提交	  单个直接提交
*1000条 	运行耗时:391ms/437ms  运行耗时:8375ms  运行耗时:14969ms
*     10K 运行耗时:3171ms
*/
		}
	});
}

对比一下子吧,测试10K的时候我实在不愿意等了...

呵呵,没事闲侃吧
1
0
分享到:
评论
1 楼 421584397 2012-11-01  

相关推荐

    Mybatis与JDBC批量插入MySQL数据库性能测试

    通过这样的性能测试,我们可以了解到在特定场景下,Mybatis和JDBC哪个更适合批量插入操作。通常,Mybatis由于其封装和优化,可能会在易用性和性能之间取得更好的平衡。但具体选择应根据项目需求和实际环境进行权衡。...

    jdbc批量操作数据分析与实例

    ### JDBC批量操作数据分析与实例 #### 一、引言 在日常软件开发中,数据库操作是必不可少的一部分。其中,批量操作作为一种高效的处理方式被广泛应用于数据处理任务中。本文将通过对一个具体的Java程序示例(使用...

    三种JDBC批量插入编程方法的比较

    本篇文章将深入探讨三种不同的JDBC批量插入编程方法,并进行对比分析,以帮助开发者更好地理解和选择适合的批量处理方式。 1. **使用PreparedStatement的addBatch()和executeBatch()** JDBC提供了...

    通过DBUNIT做批量对比测试

    批量对比测试在数据库测试中扮演着关键角色,因为往往需要确保大量的数据导入、更新或删除操作后,数据库的状态与预期一致。DBUNIT 提供了一种高效的方式来进行这种比较,它允许测试人员定义数据集(通常以 CSV 或 ...

    timesten系列八:性能对比测试

    通过本次性能对比测试可以看出,Timesten在内存型数据库领域具有显著的优势,尤其是在直接内存访问模式下,无论是基础操作还是高级配置调整,都能带来显著的性能提升。这对于那些需要处理大量实时数据的应用来说至关...

    《SQL预编译和批量提交对性能提升效果探索》测试代码

    在《SQL预编译和批量提交对性能提升效果探索》的测试代码中,开发者可能设计了一系列实验,通过对比未预编译和预编译的SQL,以及单条提交和批量提交的执行时间,来量化这两种技术带来的性能提升。他们可能会使用不同...

    51CTO下载-java-操作Oracle-批量入库的问题.pdf

    具体而言,他描述了在不同的方法下,如使用Oracle的自定义类型定义表类型、基本类型定义表类型以及JDBC批处理(JDBCBATCH)进行10000条数据的插入,并对比了它们的效率。为了分析这个问题,我们首先需要了解相关技术...

    建议使用微软JDBC Driver连接SQL Database-Jeffery1

    本文主要讨论的是在Eclipse环境中,如何使用微软的JDBC Driver来连接Azure SQL Database,并且对比了微软JDBC驱动与JTDS驱动在连接和操作数据库时的差异,强调了微软JDBC驱动在某些场景下的优势。 首先,微软的JDBC...

    mybatis_insertbatch_db.rar

    描述中提到的"源代码,springboot+mybatis 分析对比批量数据插入数据的性能对比"暗示我们将深入探讨如何在实际应用中优化数据库操作,特别是批量处理大量数据时的效率。 在Java开发中,SpringBoot和MyBatis是两个...

    Merlia_Trial_7.04

    在实际应用中,可以通过基准测试和性能对比,评估Merlia_Trial_7.04相对于其他驱动的性能提升。 总的来说,Merlia_Trial_7.04是一个值得关注的数据库访问优化工具,尤其对于那些对数据库性能有严格要求的大型项目来...

    java向mysql中插入150万条数据比较索引表的优势

    批量操作避免了频繁的网络通信,减少了数据库的开销。 例如,以下代码展示了如何批量插入数据: ```java String sql = "INSERT INTO table_name (column1, column2) VALUES (?, ?)"; PreparedStatement pstmt = ...

    数据库移植系列课程之一SQL Server to Oracle

    在实际操作中,可能还需要考虑到网络环境、数据量、业务停机时间等因素,因此,详细的规划和测试是至关重要的。"Step-by-Step_SQL2000_Oracle10g.swf"文件可能是教学视频或演示,可作为学习和参考资源,帮助理解具体...

    DBViewer

    4. **数据操作**:用户可以直接在插件中进行数据的增删改查操作,支持批量编辑和复制粘贴数据,简化了数据库操作流程。 5. **事务处理**:支持对数据库的事务控制,包括提交、回滚和保存点设置,确保数据的一致性。...

    dedup-test-01:重复数据删除编码测试

    6. **性能优化**:为了提高处理大量数据时的性能,可能需要使用多线程、批量操作或者优化查询语句。 在这个"dedup-test-01"项目中,开发者可能还关注了测试用例的选择、性能基准测试以及错误处理机制。测试可能包括...

    Spring-Framework-old1-main.zip

    3. **数据访问集成(Data Access Integration, DA/I)**:Spring提供了JDBC抽象层,简化了数据库操作,同时支持多种ORM(Object-Relational Mapping)框架,如Hibernate和MyBatis,使得操作数据库变得更加简单。...

    data-migration:通过正确的错误检查和性能测试将CSV导入SQL数据库

    JDBC提供了一种标准的方式来连接、操作和管理数据库,包括执行SQL命令。 在导入过程中,性能测试是不可或缺的环节。我们需要测量不同导入策略(如批量大小、并行处理等)对导入速度的影响,并选择最佳实践。例如,...

    JAVA-program-design-two-questions.rar_本科教学系统

    在开发这两个系统时,Java的特性如跨平台性、丰富的类库(如JDBC用于数据库操作,Swing或JavaFX构建图形用户界面)、异常处理和多线程等都将发挥重要作用。同时,为了保证代码的可读性和可维护性,应遵循良好的编程...

    分布式数据库Greenplum在地震前兆数据存储中的应用.pdf

    论文详细描述了在地震行业中构建Greenplum分布式数据库环境的过程,并对其与Oracle数据库进行了性能对比测试。这包括读取性能、扩展性能和软件兼容性的评估,以证明Greenplum在地震前兆数据存储领域的适用性。 总的...

    Flink和Spark比较.docx

    RDD支持批处理和流处理,但其流处理模型是微批处理,即数据以小批量的形式处理,这可能导致一定的延迟。Spark的主要API包括Scala、Java和Python的DataSet和DataFrame API。 Flink则采用了连续的数据流模型,它的...

Global site tag (gtag.js) - Google Analytics