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 进入正题 在前面的章节中,详 ...
随机推荐
- 网络损伤仪WANsim--不同的部署方式
网络损伤仪WANsim的业务口在逻辑上是不存在IP地址与MAC地址的,所以,WANsim可以串接在测试拓扑中的任意位置,只需要确保有流量通过WANsim即可. 不同的拓扑结构会对测试的结果造成影响.在 ...
- tomcat默认端口
关于tomcat默认端口为8080: 网页浏览器的默认端口为80.
- RegOpenKeyEx
对注册表的操作是通过句柄来完成的,在对某个键下的键值进行操作的时候首先将该键进行打开,然后使用键句柄进行引用该键,操作完后要进行关闭: 注册键的根键不需要打开,他们的句柄是固定的,直接拿来用就是了. ...
- Scrapy入门到放弃03:理解settings配置,监控Scrapy引擎
前言 代码未动,配置先行.本篇文章主要讲述一下Scrapy中的配置文件settings.py的参数含义,以及如何去获取一个爬虫程序的运行性能指标. 这篇文章无聊的一匹,没有代码,都是配置化的东西,但是 ...
- a = input(a, yymmdd10.)引发的问题
在数据清理过程中,经常会遇到以文本储存的日期型数据,这种数据不能直接进行分析,需要先将其转化为以数值存储的格式. 首先准备数据集: data data1; input a :$10. b :$10. ...
- thinkphp 初始化
public function _initialize(){ //$top_img = M('adv')->where(array('adv_id'=>1057))->find(); ...
- Spring Cloud分区发布实践(2) 微服务
我们准备一下用于查询姓名的微服务. 首先定义一下服务的接口, 新建一个空的Maven模块hello-remotename-core, 里面新建一个类: public interface RemoteN ...
- 学习笔记:数学-GCD与LCM-素数筛法
筛法 埃筛 埃拉托斯特尼筛法的缩写,EraSieve (这个英文其实是为了方便做函数名不要再写shake了) 它的核心思想其实是当确认了一个数是质数以后,把它的所有倍数打上标记说这玩意不是质数.那现在 ...
- 记录21.07.26 —— Vue/cil
VUE搭载脚手架 搭载环境 下载node node.js下载地址 控制台输入 npm install -g @vue/cil 查看版本 创建vue项目 创建完后会显示启动服务的指令 这个指令可以在pa ...
- Kubernetes安装报错总结
1.kubeadm init初使化报错 [root@k8s01 ~]# kubeadm init --kubernetes-version=v1.13.3 --pod-network-cidr=1 ...