使用jdbc向数据库插入100000条记录,分别使用statement,PreparedStatement,及PreparedStatement+批处理3种方式进行测试:
//1.使用statement插入100000条记录
public void exec(Connection conn){
try {
Long beginTime = System.currentTimeMillis();
conn.setAutoCommit(false);//设置手动提交
Statement st = conn.createStatement();
for(int i=0;i<100000;i++){
String sql="insert into t1(id) values ("+i+")";
st.executeUpdate(sql);
}
Long endTime = System.currentTimeMillis();
System.out.println("st:"+(endTime-beginTime)/1000+"秒");//计算时间
st.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//2.使用PreparedStatement对象
public void exec2(Connection conn){
try {
Long beginTime = System.currentTimeMillis();
conn.setAutoCommit(false);//手动提交
PreparedStatement pst = conn.prepareStatement("insert into t1(id) values (?)");
for(int i=0;i<100000;i++){
pst.setInt(1, i);
pst.execute();
}
conn.commit();
Long endTime = System.currentTimeMillis();
System.out.println("pst:"+(endTime-beginTime)/1000+"秒");//计算时间
pst.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//3.使用PreparedStatement + 批处理
public void exec3(Connection conn){
try {
conn.setAutoCommit(false);
Long beginTime = System.currentTimeMillis();
PreparedStatement pst = conn.prepareStatement("insert into t1(id) values (?)");
for(int i=1;i<=100000;i++){
pst.setInt(1, i);
pst.addBatch();
if(i%1000==0){//可以设置不同的大小;如50,100,500,1000等等
pst.executeBatch();
conn.commit();
pst.clearBatch();
}
}
Long endTime = System.currentTimeMillis();
System.out.println("pst+batch:"+(endTime-beginTime)/1000+"秒");
pst.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
在Oracle 10g中测试,结果:
1.使用statement耗时142秒;
2.使用PreparedStatement耗时56秒;
3.使用PreparedStatement + 批处理耗时:
a.50条插入一次,耗时5秒;
b.100条插入一次,耗时2秒;
c.1000条以上插入一次,耗时1秒;
通过以上可以得出结论,在使用jdbc大批量插入数据时,明显使用第三种方式(PreparedStatement + 批处理)性能更优。
分享到:
相关推荐
jdbc数据软件测试中使用JDBC插入大量数据的性能测试使用jdbc向数据库插入100000条记录,分别使用statement,PreparedStatement,及PreparedStatement+批处理3种方式进行测试:1、使用statement插入100000条记录...
通过这样的性能测试,我们可以了解到在特定场景下,Mybatis和JDBC哪个更适合批量插入操作。通常,Mybatis由于其封装和优化,可能会在易用性和性能之间取得更好的平衡。但具体选择应根据项目需求和实际环境进行权衡。...
在Java开发中,当需要向MySQL数据库大量插入数据时,使用JDBC的批量处理功能可以显著提高效率。本文将详细讲解如何使用JDBC批量插入10万条数据,并探讨其背后的原理和优化策略。 批量处理在JDBC中主要通过Statement...
这种方式简单易实现,但当需要插入大量数据时,其性能会明显下降。 - **批量插入**:指一次性提交多条插入语句。这种方法可以显著提高数据插入的效率,尤其是在处理大量数据时。 #### 三、示例代码分析 本节将详细...
在`JDBCBatchInsertTest.java`中,你可能会看到对这些批量插入方法的性能测试,通过计时和比较来确定哪种方法更适合特定的场景。 总结来说,选择JDBC批量插入方法应基于数据插入的特性和需求。PreparedStatement...
三、以下列出了在使用JDBC来连接Oracle数据库时可以使用的一些技巧,这些技巧能够使我们更好地发挥系统的性能和实现更多的功能(系转载)。 1、在客户端软件开发中使用Thin驱动程序 在开发Java软件方面,Oracle...
在千万级数据测试中,这些脚本可能用于模拟实际业务场景,例如,创建课程表,插入大量课程记录,然后进行各种查询操作,以此来验证ShardingJDBC的分片策略和性能。 在SQL方面,以下是一些关键知识点: 1. **索引...
以下是对使用JDBC4.0操作Oracle中BLOB类型数据的详细步骤: 首先,你需要在项目中引入Oracle JDBC驱动ojdbc6.jar,这是一个连接Oracle数据库的必备库。你可以在项目的类路径中添加这个jar包,通常将其放在/META-INF...
实验设计了多个程序来测试1000次插入操作到测试性能表TESTXXXPERF中的性能表现。这些实验分别使用OCI驱动和Thin驱动进行,以观察两者之间的性能差距。 ##### 1. 自动提交模式的影响 自动提交模式是指每次执行更新...
“testpdf”可能是用于测试生成的PDF文件,而“pfd大量数据的表格及水印.docx”可能是详细的操作步骤或结果展示,包含了如何使用iText处理大量数据和添加水印的具体步骤。 通过以上步骤,我们可以高效地利用iText...
3. 插入/更新/删除性能测试:执行DML语句,分析数据库处理这些操作的速度和资源消耗。 4. 存储过程调用:测试存储过程的执行效率,特别是那些涉及大量数据处理的存储过程。 5. 并发测试:模拟多个用户同时访问...
8. **错误处理和异常安全**:在处理大量数据时,错误处理至关重要。使用Spring JdbcTemplate可以捕获并处理SQL相关的异常,同时,确保在发生错误时能够正确回滚事务,保持数据一致性。 9. **测试和监控**:在实际...
- 对于大数据量的图片,考虑分块读写,避免一次性加载大量数据导致内存溢出。 通过以上介绍,你应该对使用JDBC将图片录入MySQL数据库有了全面的理解。实际开发中,可以根据具体需求和项目规模,选择合适的数据存储...
1. **数据分析**:PI实时数据库的强项在于处理大量实时数据,用于监控生产过程、设备状态和性能指标。 2. **报警和事件管理**:通过JDBC或OLEDB,可以设置实时报警和事件触发,实现自动化响应。 3. **数据集成**:与...
在这个场景中,我们关注的是如何将文本文件中的数据通过datagrid读取并有效插入到Oracle数据库中,以及如何进行性能测试。 首先,对于数据的读取,我们可以使用多种编程语言,如Java、Python或C#,它们都有强大的库...
通过使用JdbcTemplate,开发者可以避免编写大量重复的JDBC模板代码,例如建立连接、设置参数、处理结果集等。 2. **配置连接池**:在实际应用中,为了提高数据库访问性能和资源利用率,通常会使用连接池,如...
在Struts中,JDBC通常用于处理数据库交互,如数据查询、插入、更新和删除。有了对应的JDBC驱动,开发者可以在Eclipse中创建基于Struts的项目,并无缝连接到多种数据库。 Spring框架是另一个全面的Java企业级应用...
对于大量数据导入,批处理能显著提高效率。使用`addBatch()`和`executeBatch()`方法可以一次性提交多条插入语句,减少数据库交互次数。 6. **异常处理与关闭资源**: 在导入过程中,需要捕获可能的SQLException并...