- 20015-12-14
- 使用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<<span class="number" style="color: rgb(192, 0, 0);">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<<span class="number" style="color: rgb(192, 0, 0);">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使用statement,PreparedState…
最新推荐文章于 2021-02-28 13:25:55 发布