注意:其中的JdbcUtil是我自定义的连接工具类:代码例子链接:

package a_batch;

import util.JdbcUtil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.Statement;
/**
* 同时插入2000条数据
*
* 对于JDBC中的批处理的测试!
*
* 结论:
* 1) mysql数据库不支持PreparedStatement优化,而且不支持批处理优化。
* 2) oracle数据库即支持PreparedStatement优化,也支持批处理优化。
* @author mzy
*/
public class Demo01 { public static void main(String[] args) {
//testByStaement();
//testByStaementBatch();
//testByPreparedStaement();
//testByPreparedStaementBatch(); testTime();
} /**
* 测试执行速度
*/
public static void testTime(){
long start = System.currentTimeMillis();
//testByStaement();
//testByStaementBatch();
//testByPreparedStaement();
testByPreparedStaementBatch();
long end = System.currentTimeMillis();
System.out.println("耗时为:"+(end-start));
} /**
* 没有批处理的Statement的情况
* mysql: 耗时为:7838 oracle:耗时为:6580
*/
public static void testByStaement(){
Connection conn = null;
Statement stmt = null;
try{
conn = JdbcUtil.getConnection();
stmt = conn.createStatement();
for(int i=1;i<=2000;i++){
stmt.executeUpdate("INSERT INTO student VALUES("+i+",'张三',20,'男')");
}
}catch(Exception e){
e.printStackTrace();
}finally{
JdbcUtil.close(stmt, conn);
}
} /**
* 使用批处理的Statement的情况
* mysql: 耗时为:9097 oracle:耗时为:5477
*/
public static void testByStaementBatch(){
Connection conn = null;
Statement stmt = null;
try{
conn = JdbcUtil.getConnection();
stmt = conn.createStatement();
for(int i=1;i<=2000;i++){
//把sql添加到缓存区
stmt.addBatch("INSERT INTO student VALUES("+i+",'张三',20,'男')");
//每20条发送sql
if(i%20==0){
//执行批处理命令
stmt.executeBatch();
//清空缓存区
stmt.clearBatch();
}
}
}catch(Exception e){
e.printStackTrace();
}finally{
JdbcUtil.close(stmt, conn);
}
} /**
* 没有批处理的PrepaedStatement的情况
* mysql: 耗时为:9051 oracle:耗时为:4161
*/
public static void testByPreparedStaement(){
Connection conn = null;
PreparedStatement stmt = null;
try{
conn = JdbcUtil.getConnection();
stmt = conn.prepareStatement("INSERT INTO student VALUES(?,?,?,?)");
for(int i=1;i<=2000;i++){
//参数赋值
stmt.setInt(1, i);
stmt.setString(2, "张三");
stmt.setInt(3, 20);
stmt.setString(4, "男");
//执行
stmt.executeUpdate();
}
}catch(Exception e){
e.printStackTrace();
}finally{
JdbcUtil.close(stmt, conn);
}
} /**
* 使用批处理的PrepaedStatement的情况
* mysql:耗时为:9379 oracle: 耗时为:1391
*/
public static void testByPreparedStaementBatch(){
Connection conn = null;
PreparedStatement stmt = null;
try{
conn = JdbcUtil.getConnection();
stmt = conn.prepareStatement("INSERT INTO student VALUES(?,?,?,?)");
for(int i=1;i<=2000;i++){
//参数赋值
stmt.setInt(1, i);
stmt.setString(2, "张三");
stmt.setInt(3, 20);
stmt.setString(4, "男");
//把参数添加到缓存区
stmt.addBatch();
//每20次发送一次参数
if(i%20==0){
//执行批处理命令
stmt.executeBatch();
//清空缓存区的参数
stmt.clearBatch();
}
}
}catch(Exception e){
e.printStackTrace();
}finally{
JdbcUtil.close(stmt, conn);
}
} }

JDBC中级篇——批处理和PreparedStatement对有sql缓冲区的数据库的友好,测试的更多相关文章

  1. JDBC中级篇(MYSQL)——在JDBC中如何获得表中的,自增长的字段值

    注意:其中的JdbcUtil是我自定义的连接工具类:代码例子链接: package c_increment; import java.sql.Connection; import java.sql.P ...

  2. JDBC中级篇(MYSQL)——处理大文本(CLOB)

    注意:其中的JdbcUtil是我自定义的连接工具类:代码例子链接: package b_blob_clob; import java.io.FileNotFoundException; import ...

  3. JDBC中级篇(MYSQL)——模拟从数据库中上传下载附件

    注意:其中的JdbcUtil是我自定义的连接工具类:代码例子链接: package b_blob_clob; import java.io.BufferedOutputStream; import j ...

  4. JDBC中级篇(MYSQL)——处理文件(BLOB)

    注意:其中的JdbcUtil是我自定义的连接工具类:代码例子链接: package b_blob_clob; import java.io.FileInputStream; import java.i ...

  5. JDBC基础篇(MYSQL)——PreparedStatement执行DML、DQL等

    注意:其中的JdbcUtil是我自定义的连接工具类:代码例子链接: package day03.prepare; import java.sql.Connection; import java.sql ...

  6. 要求用Windows下批处理和Linux下的shell脚本完成,两文本交替输出

    两个短文件 两个空文件 一空一短 两长

  7. Farseer.net轻量级开源框架 中级篇:执行SQL语句

    导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 中级篇: 事务的使用 下一篇:Farseer.net轻量级开源框架 中级篇: DbFacto ...

  8. JDBC第二篇--【PreparedStatment、批处理、处理二进制、自动主键、调用存储过程、函数】

    这是我JDBC的第一篇 http://blog.csdn.net/hon_3y/article/details/53535798 1.PreparedStatement对象 PreparedState ...

  9. Kotlin——从无到有系列之中级篇(四):面向对象的特征与类(class)继承详解

    如果您对Kotlin很有兴趣,或者很想学好这门语言,可以关注我的掘金,或者进入我的QQ群大家一起学习.进步. 欢迎各位大佬进群共同研究.探索 QQ群号:497071402 进入正题 在前面的章节中,详 ...

随机推荐

  1. python基础之函数的应用

    #函数应用# 1.语法"""def 函数名(参数): 函数体"""# 2. 没有参数的函数# def readbook():# print( ...

  2. 你有没有乱用“leader”,担当是个好东西

    PS:此文为个人认知,不足处请多多批评. 近期在一线leader(经理)身上发现了几个case,然后又回想起前几年自己做的一些傻事,可能都属于明面上leader不会说什么,但私下会有情绪的类型: Ca ...

  3. P4169-CDQ分治/K-D tree(三维偏序)-天使玩偶

    P4169-CDQ分治/K-D tree(三维偏序)-天使玩偶 这是一篇两种做法都有的题解 题外话 我写吐了-- 本着不看题解的原则,没写(不会)K-D tree,就写了个cdq分治的做法.下面是我的 ...

  4. Hive开发要知道数据仓库的四个层次设计

    数据仓库:数据仓库全面接收源系统数据,ETL进程对数据进行规范化.验证.清洗,并最终装载进入数据集市,通过数据集市支持系统进行数据查询.分析,整个数据仓库包含四大层次. 1.数据仓库的四个操作    ...

  5. kali操作系统添加中文输入法

    今天一通操作真心累啊.想安装搜狗输入法,百度搜索了好多 三步走:https://blog.csdn.net/qq_44110340/article/details/101382732 一顿操作猛如虎, ...

  6. Java 给Word添加印章

    一.概述 本文以Java程序代码展示如何给Word文档添加印章,这里添加的印章为.png格式的图片,添加印章即在Word中的指定位置添加印章图片. 基本思路:加载word文档,获取段落,在段落中插入图 ...

  7. VS Code的插件安装位置改变

    VS Code的相关配置 VS Code的插件安装位置改变 可以通过创建连接,将默认的extensions位置,改变到D盘 Windows 链接彻底解决 vscode插件安装位置问题 mklink / ...

  8. 了解cookie和storage的区别及优缺点

    共同点:用于数据的存储. 区别: 1.是否需要添加到http请求头? HTTP Cookie(cookie):在客户端存储会话信息,要求服务器对任意HTTP请求发送set-cookie HTTP头作为 ...

  9. MySQL-12-innodb引擎补充

    innodb引擎保证事务的ACID 概念 redo log ---> 重做日志 ib_logfile0~1 50M 轮询使用 redo log buffer ---> redo内存区域 i ...

  10. Ubuntu系统Root用户无法登录

    默认 系统 root 登录 图形界面,出现 登录失败.解决方法如下: 1,登录普通用户, 打开终端执行命令, 使用su root或sudo -i切换到root用户(必须) su root 按照提示输入 ...