本文转载自http://blog.csdn.net/liubo5005/article/details/7239935

先上代码:

  1. import java.sql.Connection;
  2. import java.sql.DriverManager;
  3. import java.sql.PreparedStatement;
  4. import java.sql.Statement;
  5. public class TestSql {
  6. public static void main(String[] args) throws Exception {
  7. testStatement();
  8. testBatchPreparedStatement();
  9. testBatchPreparedStatement();
  10. }
  11. public static void testStatement() throws Exception {
  12. Class.forName("com.ibm.db2.jcc.DB2Driver").newInstance();
  13. String url = "jdbc:db2://172.17.252.68:60012/glhssdb";
  14. Connection con = DriverManager.getConnection(url, "ppapdb2", "ppapdb2");
  15. Statement st = con.createStatement();
  16. Long beginTime1 = System.currentTimeMillis();
  17. System.out.print("insert...");
  18. for (int i = 0; i < 100000; i++) {
  19. String sql = "insert into GL_HISDB.TESTSQL(id,name) values (" + i
  20. + ",'" + i + "')";
  21. st.executeUpdate(sql);
  22. }
  23. Long endTime1 = System.currentTimeMillis();
  24. System.out.println("st:" + (endTime1 - beginTime1) / 1000 + "秒");// 计算时间
  25. st.close();
  26. con.close();
  27. }
  28. public static void testPreparedStatement() throws Exception {
  29. Class.forName("com.ibm.db2.jcc.DB2Driver").newInstance();
  30. String url = "jdbc:db2://172.17.252.68:60012/glhssdb";
  31. Connection con = DriverManager.getConnection(url, "ppapdb2", "ppapdb2");
  32. PreparedStatement pst = con
  33. .prepareStatement("insert into GL_HISDB.TESTSQL(id,name) values (?,?)");
  34. Long beginTime1 = System.currentTimeMillis();
  35. System.out.print("insert...");
  36. for (int i = 0; i < 100000; i++) {
  37. pst.setInt(1, i);
  38. pst.setString(2, "" + i);
  39. pst.execute();
  40. }
  41. Long endTime1 = System.currentTimeMillis();
  42. System.out.println("pst:" + (endTime1 - beginTime1) / 1000 + "秒");// 计算时间
  43. pst.close();
  44. con.close();
  45. }
  46. public static void testBatchPreparedStatement() throws Exception {
  47. Class.forName("com.ibm.db2.jcc.DB2Driver").newInstance();
  48. String url = "jdbc:db2://172.17.252.68:60012/glhssdb";
  49. Connection con = DriverManager.getConnection(url, "ppapdb2", "ppapdb2");
  50. PreparedStatement pst = con
  51. .prepareStatement("insert into GL_HISDB.TESTSQL(id,name) values (?,?)");
  52. Long beginTime1 = System.currentTimeMillis();
  53. con.setAutoCommit(false);// 手动提交
  54. System.out.print("insert...");
  55. for (int i = 0; i < 100000; i++) {
  56. pst.setInt(1, i);
  57. pst.setString(2, "" + i);
  58. pst.addBatch();
  59. if (i % 1000 == 0) {// 可以设置不同的大小;如50,100,500,1000等等
  60. pst.executeBatch();
  61. con.commit();
  62. pst.clearBatch();
  63. }
  64. }
  65. Long endTime1 = System.currentTimeMillis();
  66. System.out.println("pst batch:" + (endTime1 - beginTime1) / 1000 + "秒");// 计算时间
  67. pst.close();
  68. con.close();
  69. }
  70. }

三种调用方式Statment、PreparedStatement 以及PreparedStatement  Batch,往DB2数据库插入10万条数据,跑出来的时间为:

1、insert...st:291秒 2、insert...pst:150秒 3、insert...pst batch:5秒

总结引用经典:在JDBC应用中,如果你已经是稍有水平开发者,你就应该始终以PreparedStatement代替Statement.也就是说,在任何时候都不要使用Statement。

Java Statement和PreparedStatement性能测试(转)的更多相关文章

  1. 【Java编程】JDBC注入攻击-Statement 与 PreparedStatement

    在上一篇[Java编程]建立一个简单的JDBC连接-Drivers, Connection, Statement and PreparedStatement我们介绍了怎样使用JDBC驱动建立一个简单的 ...

  2. 【Java编程】建立一个简单的JDBC连接-Drivers, Connection, Statement and PreparedStatement

    本blog提供了一个简单的通过JDBC驱动建立JDBC连接例程.并分别通过Statement和PreparedStatement实现对数据库的查询. 在下一篇blog中将重点比較Statement与P ...

  3. Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别?

    Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别? Java 中访问数据库的步骤 1)注册驱动: 2)建立连接: 3)创建Statement: 4)执 ...

  4. Java的Statement、PreparedStatement、PreparedStatement + 批处理 的区别

    首先来说一下连接了数据库之后执行的sql语句:通常连接了数据库之后,我们就会获得statement 类的对象或者是他的子类的对象(PreparedStatement类),通过这个对象我们就可以利用它提 ...

  5. Statement和PreparedStatement的区别; 什么是SQL注入,怎么防止SQL注入?

    问题一:Statement和PreparedStatement的区别 先来说说,什么是java中的Statement:Statement是java执行数据库操作的一个重要方法,用于在已经建立数据库连接 ...

  6. 理解 Statement 和 PreparedStatement

    java,servlet中的PreparedStatement 接口继承了Statement,并与之在两方面有所不同:有人主张,在JDBC应用中,如果你已经是稍有水平开发者,你就应该始终以Prepar ...

  7. Statement和PreparedStatement的特点 MySQL数据库分页 存取大对象 批处理 获取数据库主键值

    1 Statement和PreparedStatement的特点   a)对于创建和删除表或数据库,我们可以使用executeUpdate(),该方法返回0,表示未影向表中任何记录   b)对于创建和 ...

  8. Statement和PreparedStatement的区别; 什么是SQL注入,怎么防止SQL注入? (转)

    问题一:Statement和PreparedStatement的区别 先来说说,什么是java中的Statement:Statement是java执行数据库操作的一个重要方法,用于在已经建立数据库连接 ...

  9. JDBC中的Statement和PreparedStatement的差别

    以Oracle为例吧 Statement为一条Sql语句生成运行计划, 假设要运行两条sql语句 select colume from table where colume=1; select col ...

随机推荐

  1. Java序列化的几种方式以及序列化的作用

    Java序列化的几种方式以及序列化的作用 本文着重讲解一下Java序列化的相关内容. 如果对Java序列化感兴趣的同学可以研究一下. 一.Java序列化的作用    有的时候我们想要把一个Java对象 ...

  2. CentOS 6.5安装配置LNMP服务器(Nginx+PHP+MySQL)

    CentOS 6.5安装配置LNMP服务器(Nginx+PHP+MySQL) 一.准备篇: /etc/init.d/iptables stop #关闭防火墙 关闭SELINUX vi /etc/sel ...

  3. commons-pool实战之 GenericObjectPool和GenericKeyedObjectPool

    前面两篇文章说了怎么样简单的使用commons-pool库,这里需要考虑一个问题就是在很多时候我们在池里的对象都是比较重型的并且大多数比较稀缺的 资源,比如说数据库连接,这样如果一直把一些连接放在池里 ...

  4. iOS数据库学习(2)-基础SQL语句

    /* 1. 创建一个数据表 */ CREATE TABLE IF NOT EXISTS t_dog (name text, age integer); CREATE TABLE IF NOT EXIS ...

  5. C#反射机制(转)

    一:反射的定义 审查元数据并收集关于它的类型信息的能力.元数据(编译以后的最基本数据单元)就是一大堆的表,当编译程序集或者模块时,编译器会创建一个类定义表,一个字段定义表,和一个方法定义表等. Sys ...

  6. 使用emmet如何生成lipsum的随机内容

    emmet不会解析(即扩展)大括号中的内容, 它只是把大括号中的内容当成纯粹的字符串, 当成 literal的文本, 不会当成lipsum的缩写, 不会进行扩展. 要扩展, 就必须把lorem, li ...

  7. css使 同一行内的 文字和图片 垂直居中对齐?

    设置父容器, 使 父容器 div 下的所有元素 都 垂直对齐: father-container *{ vertical-align:middle 找回密码

  8. linux网络:常用命令(二)

    1.ping命令:与Windows下基本功能一样但也有所区别 1.命令格式: ping [选项] ip地址或域名主机等 选项 -c 加次数 -d 使用Socket的SO_DEBUG功能. -f 极限检 ...

  9. 安装好Android Studio(如果内存足够可以改下as的内存)

    找到studio的bin目录,找到如下文件

  10. AngularJS API之extend扩展对象

    angular.extend(dst,src),在我实验的1.2.16版本上是支持深拷贝的.但是最新的API显示,这个方法是不支持深拷贝的. 另外,第二个参数src支持多个对象. 第一种使用方式 va ...