三种JDBC批量插入编程方法的比较
2017-04-28 16:32
260 查看
JDBC批量插入主要用于数据导入和日志记录因为日志一般都是先写在文件下的等。
我用MySQL 5.1.5的JDBC driver 分别对三种比较常用的方法做了测试
方法一,使用PreparedStatement加批量的方法
方法二 使用Statement加批量的方法
方法三:直接使用Statement
方法一:17.844s
方法二:18.421s
方法三:16.359s
可以看出JDBC的batch语句插入不但没有性能提升,反而比没有用batch的时候要慢,当然这可能跟JDBC具体驱动的实现方法有关。 附件中是我测试代码,可以用来在自己电脑上跑一下。
在执行批量插入的时候最主要的是将自动提交取消,这样不管是否用JDBC的batch语法应该都没有关系。
我用MySQL 5.1.5的JDBC driver 分别对三种比较常用的方法做了测试
方法一,使用PreparedStatement加批量的方法
try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection(o_url, userName, password); conn.setAutoCommit(false); String sql = "INSERT into tbl_person (name,age) VALUES(?,?)"; PreparedStatement prest = conn.prepareStatement(sql); for(int x = 0; x < size; x++){ prest.setString(1, "张三"); prest.setString(2, 20); prest.addBatch(); } prest.executeBatch(); conn.commit(); conn.close(); } catch (SQLException ex) { Logger.getLogger(MyLogger.class.getName()).log(Level.SEVERE, null, ex); } catch (ClassNotFoundException ex) { Logger.getLogger(MyLogger.class.getName()).log(Level.SEVERE, null, ex); }
方法二 使用Statement加批量的方法
conn.setAutoCommit(false); Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); for(int x = 0; x < size; x++){ stmt.addBatch("INSERT INTO adlogs(ip,website,yyyymmdd,hour,object_id) VALUES('192.168.1.3', 'localhost','20081009',8,'23123')"); } stmt.executeBatch(); conn.commit();
方法三:直接使用Statement
conn.setAutoCommit(false); Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); for(int x = 0; x < size; x++){ stmt.execute("INSERT INTO adlogs(ip,website,yyyymmdd,hour,object_id) VALUES('192.168.1.3', 'localhost','20081009',8,'23123')"); } conn.commit();使用上述方法分别插入10万条数据的平均测试时间为:
方法一:17.844s
方法二:18.421s
方法三:16.359s
可以看出JDBC的batch语句插入不但没有性能提升,反而比没有用batch的时候要慢,当然这可能跟JDBC具体驱动的实现方法有关。 附件中是我测试代码,可以用来在自己电脑上跑一下。
在执行批量插入的时候最主要的是将自动提交取消,这样不管是否用JDBC的batch语法应该都没有关系。
conn.setAutoCommit(false)个人觉得第一种方法是最方便最实用的。
相关文章推荐
- 三种JDBC批量插入编程方法的比较
- 三种JDBC批量插入编程方法的比较
- 三种JDBC批量插入编程方法的比较
- 三种JDBC批量插入编程方法的比较
- 三种JDBC批量插入编程方法的比较
- 三种JDBC批量插入编程方法的比较
- 三种JDBC批量插入编程方法的比较
- 三种JDBC批量插入编程方法的比较
- 三种JDBC批量插入编程方法的比较
- 三种JDBC批量插入编程方法的比较
- JDBC:大数据量插入的三种方法比较
- Java 图形界面编程 中三种事件处理方法之比较
- asp.net跳转页面的三种方法比较
- Java Swing 中三种事件处理方法之比较
- Asp.net中实现页面跳转的三种方法比较
- asp.net跳转页面的三种方法比较
- C#往SQL数据库字段中插入二进制文件的三种方法
- asp.net跳转页面的三种方法比较
- Java Swing 中三种事件处理方法之比较
- 三种移动无标题窗口方法的比较