JDBC中级篇——批处理和PreparedStatement对有sql缓冲区的数据库的友好,测试
注意:其中的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缓冲区的数据库的友好,测试的更多相关文章
- JDBC中级篇(MYSQL)——在JDBC中如何获得表中的,自增长的字段值
注意:其中的JdbcUtil是我自定义的连接工具类:代码例子链接: package c_increment; import java.sql.Connection; import java.sql.P ...
- JDBC中级篇(MYSQL)——处理大文本(CLOB)
注意:其中的JdbcUtil是我自定义的连接工具类:代码例子链接: package b_blob_clob; import java.io.FileNotFoundException; import ...
- JDBC中级篇(MYSQL)——模拟从数据库中上传下载附件
注意:其中的JdbcUtil是我自定义的连接工具类:代码例子链接: package b_blob_clob; import java.io.BufferedOutputStream; import j ...
- JDBC中级篇(MYSQL)——处理文件(BLOB)
注意:其中的JdbcUtil是我自定义的连接工具类:代码例子链接: package b_blob_clob; import java.io.FileInputStream; import java.i ...
- JDBC基础篇(MYSQL)——PreparedStatement执行DML、DQL等
注意:其中的JdbcUtil是我自定义的连接工具类:代码例子链接: package day03.prepare; import java.sql.Connection; import java.sql ...
- 要求用Windows下批处理和Linux下的shell脚本完成,两文本交替输出
两个短文件 两个空文件 一空一短 两长
- Farseer.net轻量级开源框架 中级篇:执行SQL语句
导航 目 录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 中级篇: 事务的使用 下一篇:Farseer.net轻量级开源框架 中级篇: DbFacto ...
- JDBC第二篇--【PreparedStatment、批处理、处理二进制、自动主键、调用存储过程、函数】
这是我JDBC的第一篇 http://blog.csdn.net/hon_3y/article/details/53535798 1.PreparedStatement对象 PreparedState ...
- Kotlin——从无到有系列之中级篇(四):面向对象的特征与类(class)继承详解
如果您对Kotlin很有兴趣,或者很想学好这门语言,可以关注我的掘金,或者进入我的QQ群大家一起学习.进步. 欢迎各位大佬进群共同研究.探索 QQ群号:497071402 进入正题 在前面的章节中,详 ...
随机推荐
- 简单设计一个onedata指标管理体系
以阿里云的maxcompute的数据仓库架构为例, 从上往下定义, dwp的数据,来源是dws+dim,最主要是dws.这里不讨论dim的作用. dws的数据来源于dwd. dwd的数据来源于ods. ...
- Blazor 事件处理开发指南
翻译自 Waqas Anwar 2021年3月25日的文章 <A Developer's Guide To Blazor Event Handling> [1] 如果您正在开发交互式 We ...
- Guava - Map
创建Map 通常在创建map时使用new HashMap<>();的方法,guava提供了一个简洁的方法 Maps.newHashMap(); List转换Map List<Solu ...
- java 利用Calendar进行日期更改
//建立1个日期实例 Date tomorrow= new Date(); //获取今天日期 Date nowDate = Calendar.getInstance().getTime(); // 构 ...
- Axure RP 9 Enterprise/Pro/Team for Mac/Windows安装破解版激活教程
Axure RP 9.0 是一款功能强大的.操作方便.专业可靠的快速原型设计工具.一款能够在这里体验最简单的设计方式,这里有着全新的升级的软件界面,更加的时尚,更加的丰富,专为每一个用户提供了便捷的设 ...
- canvas的globalCompositeOperation属性
在开发过程中遇到过类似刮刮卡的效果,就是涂抹时变透明,显示出下方的内容,做法思路简单说一下问题和解决方案: 分为2层,最下面一层是内容,比如'一等奖',上面一层用一个canvas遮挡住,画布本来是透明 ...
- jquery 判断单/复选框是否被选中
1 <div> 2 <span>高亮:</span><input type="checkbox" name="light&quo ...
- GoAhead 远程命令执行漏洞(CVE-2017-17562)
poc地址 https://github.com/ivanitlearning/CVE-2017-17562 执行 msfvenom -a x64 --platform Linux -p linux/ ...
- java.lang.RuntimeException: Cannot create a secure XMLInputFactory 解决
客户端调用服务端cxf,服务端报 java.lang.RuntimeException: Cannot create a secure XMLInputFactory 我的cxf 版本 为 3.0. ...
- SpringCloud升级之路2020.0.x版-8.理解 NamedContextFactory
本系列为之前系列的整理重启版,随着项目的发展以及项目中的使用,之前系列里面很多东西发生了变化,并且还有一些东西之前系列并没有提到,所以重启这个系列重新整理下,欢迎各位留言交流,谢谢!~ spring- ...