jdbc基础 (四) 批处理
批处理,就是字面上的意思,一次性处理一批sql语句。
直接看例子吧:
package com.cream.ice.jdbc; import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement; import org.junit.Test; /**
*
* 假设已经存在表test:
* create table test(
* id int primary key,
* name varchar(20)
* );
*
* @author ice
*
*/ public class Batch {
private Connection connection;
private Statement statement;
private PreparedStatement preStatement;
private ResultSet resultSet; /**
* 向ttest中插入2条记录,删除掉第1条
* 由于批处理的多条语句不同,所以使用Statement进行批处理
*/
@Test
public void testBatch1() {
try {
connection = JdbcUtils.getConnection();
statement = connection.createStatement(); String sql1 = "insert into test (id,name) values(1,'Tom')";
String sql2 = "insert into test (id,name) values(2,'Jack')";
String sql3 = "delete from test where id=1"; // 内部维护了一个List,将sql语句加到List中
statement.addBatch(sql1);
statement.addBatch(sql2);
statement.addBatch(sql3); // 执行批处理
int num[] = statement.executeBatch(); // i为每条语句影响到的行数
for (int i : num)
System.out.print(i + " "); } catch (Exception e) {
e.printStackTrace();
} finally {
JdbcUtils.releaseResources(null, statement, connection);
}
} /**
* 向test中插入100条记录
* 由于语句完全相同,只是参数不同,使用PreparedStatement
*/
@Test
public void testBatch2() {
try {
connection = JdbcUtils.getConnection(); String sql = "insert into test (id,name) values(?,?)"; preStatement = connection.prepareStatement(sql); // 要插入100条记录
for (int i = 0; i < 100; i++) {
preStatement.setInt(1, i + 1);
preStatement.setString(2, "No." + (i + 1));
preStatement.addBatch();
} // 执行批处理语句
preStatement.executeBatch(); statement=connection.createStatement();
resultSet=statement.executeQuery("select * from test"); //将插入记录打印到控制台上
while(resultSet.next()){
System.out.print("id:"+resultSet.getInt("id")+" ");
System.out.println("name:"+resultSet.getString("name"));
} } catch (Exception e) {
e.printStackTrace();
} finally {
JdbcUtils.releaseResources(null, preStatement, connection);
JdbcUtils.releaseResources(resultSet, statement, connection);
}
}
}
代码里使用了工具类JdbcUtils,可参阅jdbc基础 (二) 通过properties配置文件连接数据库中的实现。
第一个例子中由于批处理的多条语句不同,所以使用Statement进行批处理。
第二个例子中由于语句完全相同,只是参数不同,使用PreparedStatement来处理。
这里值得注意的是,在第二个例子中,如果批处理语句数量不是100,而是达到几十万或上百万条,则在mysql中是极为耗时的,需要若干小时才可处理完,但如果换成oracle数据库,只需几十秒便可完成。
jdbc基础 (四) 批处理的更多相关文章
- JDBC 基础知识总结
1. 何谓JDBC --- Java Database Connectivity. 由Sun 公司提供的访问数据库的一组java类和接口,用来对数据库进行链接.发送SQL语句.处理返回结果,为开发 ...
- JDBC基础:JDBC快速入门,JDBC工具类,SQL注入攻击,JDBC管理事务
JDBC基础 重难点梳理 一.JDBC快速入门 1.jdbc的概念 JDBC(Java DataBase Connectivity:java数据库连接)是一种用于执行SQL语句的Java API,可以 ...
- Python全栈开发【基础四】
Python全栈开发[基础四] 本节内容: 匿名函数(lambda) 函数式编程(map,filter,reduce) 文件处理 迭代器 三元表达式 列表解析与生成器表达式 生成器 匿名函数 lamb ...
- Bootstrap<基础四> 代码
Bootstrap 允许您以两种方式显示代码: 第一种是 <code> 标签.如果您想要内联显示代码,那么您应该使用 <code> 标签. 第二种是 <pre> 标 ...
- jdbc基础 (五) 连接池与数据源 DBCP以及C3P0的使用
一.连接池的概念和使用 在实际应用开发中,特别是在WEB应用系统中,如果JSP.Servlet或EJB使用JDBC直接访问数据库中的数据,每一次数据访问请求都必须经历建立数据库连接.打开数据库.存取数 ...
- jdbc基础 (三) 大文本、二进制数据处理
LOB (Large Objects) 分为:CLOB和BLOB,即大文本和大二进制数据 CLOB:用于存储大文本 BLOB:用于存储二进制数据,例如图像.声音.二进制文件 在mysql中,只有B ...
- jdbc基础 (二) 通过properties配置文件连接数据库
csdn博文地址:jdbc基础 (二) 通过properties配置文件连接数据库 上一篇描述了对mysql数据库的简单操作,下面来看一下开发中应该如何灵活应用. 因为jdbc对数据库的驱动加载.连接 ...
- JDBC基础教程
本文实例讲述了JDBC基础知识与技巧.分享给大家供大家参考.具体分析如下: 1.什么是JDBC? 通俗来讲JDBC技术就是通过java程序来发送SQL语句到数据库,数据库收到SQL语句后执行,把结果返 ...
- Python 基础 四 面向对象杂谈
Python 基础 四 面向对象杂谈 一.isinstance(obj,cls) 与issubcalss(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls ...
随机推荐
- JS高级程序设计2nd部分知识要点2
ECMAScript中所有函数的参数都是按值传递的. 5种基本数据类型: Undfined,Null,Boolean,Number,String. 当代码在一个环境中执行时,会创建变量对象的一个作用域 ...
- python正则表达式 小例几则
会用到的语法 正则字符 释义 举例 + 前面元素至少出现一次 ab+:ab.abbbb 等 * 前面元素出现0次或多次 ab*:a.ab.abb 等 ? 匹配前面的一次或0次 Ab?: A.Ab 等 ...
- sqlserver 2005 分布式架构 对等事务复制 .
http://www.cnblogs.com/qanholas/archive/2012/03/22/2412444.html 一.为什么要使用对等事务复制 首先要说明的是使用sqlserve ...
- JavaScript的几种函数的结构形式
匿名函数,普通函数,变量函数,基于对象的方法 介绍它们的优劣点(性能,执行条件,可维护性,适合大型还是小型) Javascript有着灵活多变的函数方法,具体选用何种形式,都会极大地影响应用程序的编写 ...
- Oracle索引(B*tree和Bitmap)学习
在Oracle中,索引基本分为以下几种:B*Tree索引,反向索引,降序索引,位图索引,函数索引,interMedia全文索引等,其中最常用的是B*Tree索引和Bitmap索引. (1).与索引相关 ...
- Bellman-Ford算法解决单源最短路问题
#include<stdio.h> #include<stdlib.h> #include<stdbool.h> #define max 100 #define I ...
- selenium遇到异常自动截图
最近要在框架中添加case失败时,要自动截图,主要又两种方式,思想都是在抛异常的时候,捕获到异常,并作页面截图处理.今天坐下总结. 一.第一种方式,重写onException方法 只针对webdriv ...
- css reset重置样式有那么重要吗?
在以前写html代码的时候,一般都会在head里添加重置样式reset.css,其内容如下: @charset "utf-8"; html, body, div, span, ap ...
- CSS 属性 :before && :after的用法,伪类和伪元素的区别
一::before && :after的用法 :before 如同对伪元素的名称一样,:before 是用来给指定的元素的内容前面插入新的内容.举例说明: .before:before ...
- CSU 1116 Kingdoms
题意:给你n个城市,m条被摧毁的道路,每条道路修复需要c元,总共有k元,给你每个城市的人口,问在总费用不超过k的情况下 与1号城市相连的城市的最大总人口(包括1号城市) 思路:1号城市是必取的,剩余最 ...