总是使用框架等等,都是封装好的操作,好久没用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的时候我实在不愿意等了...
呵呵,没事闲侃吧
分享到:
相关推荐
通过这样的性能测试,我们可以了解到在特定场景下,Mybatis和JDBC哪个更适合批量插入操作。通常,Mybatis由于其封装和优化,可能会在易用性和性能之间取得更好的平衡。但具体选择应根据项目需求和实际环境进行权衡。...
### JDBC批量操作数据分析与实例 #### 一、引言 在日常软件开发中,数据库操作是必不可少的一部分。其中,批量操作作为一种高效的处理方式被广泛应用于数据处理任务中。本文将通过对一个具体的Java程序示例(使用...
本篇文章将深入探讨三种不同的JDBC批量插入编程方法,并进行对比分析,以帮助开发者更好地理解和选择适合的批量处理方式。 1. **使用PreparedStatement的addBatch()和executeBatch()** JDBC提供了...
批量对比测试在数据库测试中扮演着关键角色,因为往往需要确保大量的数据导入、更新或删除操作后,数据库的状态与预期一致。DBUNIT 提供了一种高效的方式来进行这种比较,它允许测试人员定义数据集(通常以 CSV 或 ...
通过本次性能对比测试可以看出,Timesten在内存型数据库领域具有显著的优势,尤其是在直接内存访问模式下,无论是基础操作还是高级配置调整,都能带来显著的性能提升。这对于那些需要处理大量实时数据的应用来说至关...
在《SQL预编译和批量提交对性能提升效果探索》的测试代码中,开发者可能设计了一系列实验,通过对比未预编译和预编译的SQL,以及单条提交和批量提交的执行时间,来量化这两种技术带来的性能提升。他们可能会使用不同...
具体而言,他描述了在不同的方法下,如使用Oracle的自定义类型定义表类型、基本类型定义表类型以及JDBC批处理(JDBCBATCH)进行10000条数据的插入,并对比了它们的效率。为了分析这个问题,我们首先需要了解相关技术...
本文主要讨论的是在Eclipse环境中,如何使用微软的JDBC Driver来连接Azure SQL Database,并且对比了微软JDBC驱动与JTDS驱动在连接和操作数据库时的差异,强调了微软JDBC驱动在某些场景下的优势。 首先,微软的JDBC...
描述中提到的"源代码,springboot+mybatis 分析对比批量数据插入数据的性能对比"暗示我们将深入探讨如何在实际应用中优化数据库操作,特别是批量处理大量数据时的效率。 在Java开发中,SpringBoot和MyBatis是两个...
在实际应用中,可以通过基准测试和性能对比,评估Merlia_Trial_7.04相对于其他驱动的性能提升。 总的来说,Merlia_Trial_7.04是一个值得关注的数据库访问优化工具,尤其对于那些对数据库性能有严格要求的大型项目来...
批量操作避免了频繁的网络通信,减少了数据库的开销。 例如,以下代码展示了如何批量插入数据: ```java String sql = "INSERT INTO table_name (column1, column2) VALUES (?, ?)"; PreparedStatement pstmt = ...
在实际操作中,可能还需要考虑到网络环境、数据量、业务停机时间等因素,因此,详细的规划和测试是至关重要的。"Step-by-Step_SQL2000_Oracle10g.swf"文件可能是教学视频或演示,可作为学习和参考资源,帮助理解具体...
4. **数据操作**:用户可以直接在插件中进行数据的增删改查操作,支持批量编辑和复制粘贴数据,简化了数据库操作流程。 5. **事务处理**:支持对数据库的事务控制,包括提交、回滚和保存点设置,确保数据的一致性。...
6. **性能优化**:为了提高处理大量数据时的性能,可能需要使用多线程、批量操作或者优化查询语句。 在这个"dedup-test-01"项目中,开发者可能还关注了测试用例的选择、性能基准测试以及错误处理机制。测试可能包括...
3. **数据访问集成(Data Access Integration, DA/I)**:Spring提供了JDBC抽象层,简化了数据库操作,同时支持多种ORM(Object-Relational Mapping)框架,如Hibernate和MyBatis,使得操作数据库变得更加简单。...
JDBC提供了一种标准的方式来连接、操作和管理数据库,包括执行SQL命令。 在导入过程中,性能测试是不可或缺的环节。我们需要测量不同导入策略(如批量大小、并行处理等)对导入速度的影响,并选择最佳实践。例如,...
在开发这两个系统时,Java的特性如跨平台性、丰富的类库(如JDBC用于数据库操作,Swing或JavaFX构建图形用户界面)、异常处理和多线程等都将发挥重要作用。同时,为了保证代码的可读性和可维护性,应遵循良好的编程...
论文详细描述了在地震行业中构建Greenplum分布式数据库环境的过程,并对其与Oracle数据库进行了性能对比测试。这包括读取性能、扩展性能和软件兼容性的评估,以证明Greenplum在地震前兆数据存储领域的适用性。 总的...
RDD支持批处理和流处理,但其流处理模型是微批处理,即数据以小批量的形式处理,这可能导致一定的延迟。Spark的主要API包括Scala、Java和Python的DataSet和DataFrame API。 Flink则采用了连续的数据流模型,它的...