当前位置: 首页 > news >正文

Java Statement和PreparedStatement性能测试(转)

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

先上代码:

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

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

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

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

转载于:https://www.cnblogs.com/abc8023/p/4727137.html

相关文章:

  • AJAX - 向服务器发送请求
  • PowerShell-第3章 变量与对象
  • JSON
  • 【数据结构】非循环队列
  • 【JavaScript】encodeURI() 函数
  • 【JavaScript】 encodeURI() 函数
  • 关系型数据库跟费关系型数据库区别
  • 使用json往返传输数据 post方法
  • ubuntu下没有中文输入法的解决办法!
  • 【jQuery 遍历】 - map() 方法
  • HTML中的Meta http-equiv属性详解(转)
  • 【jQuery 】参考手册 - 遍历
  • 在构造方法中存在异常的惯用处理法
  • 在Ajax中使用XML通信
  • 平衡二叉树旋转
  • 【Leetcode】101. 对称二叉树
  • @jsonView过滤属性
  • 0x05 Python数据分析,Anaconda八斩刀
  • AHK 中 = 和 == 等比较运算符的用法
  • js中的正则表达式入门
  • overflow: hidden IE7无效
  • React-生命周期杂记
  • Terraform入门 - 3. 变更基础设施
  • 经典排序算法及其 Java 实现
  • 区块链共识机制优缺点对比都是什么
  • 一天一个设计模式之JS实现——适配器模式
  • C# - 为值类型重定义相等性
  • Java性能优化之JVM GC(垃圾回收机制)
  • zabbix3.2监控linux磁盘IO
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​马来语翻译中文去哪比较好?
  • ​业务双活的数据切换思路设计(下)
  • #if 1...#endif
  • #在 README.md 中生成项目目录结构
  • (145)光线追踪距离场柔和阴影
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (二)PySpark3:SparkSQL编程
  • (二十三)Flask之高频面试点
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转)jQuery 基础
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • (状压dp)uva 10817 Headmaster's Headache
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .a文件和.so文件
  • .cn根服务器被攻击之后
  • .NET 5种线程安全集合
  • .NET CORE 第一节 创建基本的 asp.net core
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .net core使用ef 6