2009-05-21
使用JDBC插入大量数据的性能测试
关键字: 性能测试
使用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 + 批处理)性能更优。
分享到:
相关推荐
名人档案(辛弃疾、李清照)(1).docx
._moood UI KitAdobeXD源码下载设计素材UI设计
full_circle_appAdobeXD源码下载设计素材UI设计
Gym_Responsive_Landing_PageAdobeXD源码下载设计素材UI设计
sql,SQL(Structured Query Language,结构化查询语言)是一种标准化的语言,用于在关系数据库管理系统(RDBMS)中存取和操作数据。SQL 使得用户能够访问和操作数据库中的数据,包括数据的查询、插入、更新和删除,以及数据库结构的创建和修改。
一个很烂的项目但是获第二十二届江西省学生信息素养提升实践活动一等奖、第三十八届江西省青少年科技创新大赛二等奖
JAVA文件压缩与解压缩实践(源代码+论文)
Event_Responsive_Landing_PageAdobeXD源码下载设计素材UI设计
这是宁波创客大赛 Timer 项目的Github
汽车价格离群值检测.zip
大家好!这是近期通过前端技术实现的一个“酷炫黑白粒子空间旋转特效”,本资源包含完整的可执行代码(下载文件,解压后可以点击运行)和运行特效展示,该内容已经在博客中记录:https://xiexu.blog.csdn.net/article/details/132677358(预计于2025年发布)。欢迎正在学习前端的朋友下载练手~
JAVAWEB网络相册
codeforce Rudolf and the Another Competition的C语言写法(用了sort)
打印模板乐器五线谱A4打印模板高清待办练字模板PDF下载
物流大数据服务平台HTML模板源码 大数据大屏展示源码 VUE
FANUC 操作手册
南京大学南园教学楼 7.m4a
人工智能的基础数学.pdf
【资源说明】 Java毕业设计 基于springboot学生成绩可视化系统源码+部署文档+全部数据资料.zipJava毕业设计 基于springboot学生成绩可视化系统源码+部署文档+全部数据资料.zipJava毕业设计 基于springboot学生成绩可视化系统源码+部署文档+全部数据资料.zip 【备注】 1、该项目是个人高分毕业设计项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过mac/window10/11测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
AEM-CoreComponents-UI-KitAdobeXD源码下载设计素材UI设计