JDBC操作数据库的批处理
在JDBC开发中,操作数据库需要与数据库建立连接,然后将要执行的SQL语句传送到数据库服务器,最后关闭数据库连接,都是按照这样一个流程进行操作的。如果按照该流程执行多条SQL语句,那么就需要建立多个数据库连接,这样会将时间浪费在数据库连接上。针对这一问题,JDBC的批处理提供了很好的解决方案。
JDBC中批处理的原理是将批量的SQL语句一次性发送到数据库中进行执行,从而解决多次与数据库连接所产生的速度瓶颈。
例1.1 创建学生信息表,通过JDBC的批处理操作,一次性将多个学生信息写入到数据库中。
(1)创建学生信息表tb_student_batch,其结构如下所示:

(2)创建名称为Batch的类,该类用于实现对学生信息的批量添加操作。首先在Batch类中编写getConnection()方法,用于获取数据库连接Connection对象,其关键代码如下:
/**
* 获取数据库连接
* @return Connection 对象
*/
public Connection getConnection(){
Connection conn=null;
try {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/stu";
String user = "root";
String password = "1234";
conn=DriverManager.getConnection(url, user, password);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
然后编写saveBatch()方法,实现批量添加学生信息功能,实例中主要通过PreparedStatement对象批量添加学生信息。关键代码如下:
/**
* 批量添加数据
* @return 所影响的行数
*/
public int saveBatch(){
int row=0;
Connection conn=getConnection();
try {
String sql = "insert into tb_student_batch(id,name,sex,age) values(?,?,?,?)";
PreparedStatement ps = conn.prepareStatement(sql);
Random random = new Random();
for(int i=0;i<10;i++){
ps.setInt(1, i+1);
ps.setString(2, "学生"+i);
ps.setBoolean(3, i%2==0?true:false);
ps.setInt(4, random.nextInt(5)+10);
ps.addBatch(); //添加批处理命令
}
int[] rows = ps.executeBatch(); //执行批处理操作并返回计数组成的数组
row = rows.length;
ps.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return row; //返回添加的行数
}
注意:PreparedStatement对象的批处理操作调用的是executeBatch()方法,而不是execute()方法或者executeUpdate()方法。
(3)创建程序中的首页面index.jsp,在该页面中通过<jsp:useBean>实例化Batch对象,并执行批量添加数据操作。关键代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head> <body>
<jsp:useBean id="batch" class="com.cn.gao.Batch"></jsp:useBean>
<%
//执行批量插入操作
int row = batch.saveBatch();
out.print("批量插入了【"+row+"】条数据");
%>
</body>
</html>
实例运行后,程序向数据库批量添加了10条学生信息数据,其运行结果如下图所示:

运行成功后,可以打开数据表tb_student_batch进行查看,其效果如下:

JDBC操作数据库的批处理的更多相关文章
- JDBC操作数据库之批处理
JDBC开发中,操作数据库需要和数据库建立连接,然后将要执行的SQL语句发送到数据库服务器,最后关闭数据库连接,都是按照这样的操做的,如果按照此流程要执行多条SQL语句,那么就要建立多个数据库连接,将 ...
- 使用JDBC对数据库实现批处理操作
本篇讲述如何使用JDBC对数据库实现批处理操作.很多时候单条SQL命令不能满足我们的需求,我们需要对数据库一次实现很多操作,需要发送一批SQL命令给数据库执行. 而JDBC也提供了相应的方法给我们实现 ...
- 用于JDBC操作数据库的公共类
/* * @(#)CommonSql.java 2011-9-5 * * Copyright 2011 Bianjing,All rights reserved. */ import java.sql ...
- JDBC操作数据库的学习(2)
在上一篇博客<JDBC操作数据库的学习(1)>中通过对例1,我们已经学习了一个Java应用如何在程序中通过JDBC操作数据库的步骤流程,当然我们也说过这样的例子是无法在实际开发中使用的,本 ...
- JDBC操作数据库的学习(1)
单单对数据库的操作,比如说MySQL,我们可以在命令行窗口中执行,但是一般是应用程序要操作数据库,因此我们应该在程序中的代码上体现对数据库的操作,那么使用程序应用如何操作数据库呢?那就要使用到数据库的 ...
- JDBC操作数据库的三种方式比较
JDBC(java Database Connectivity)java数据库连接,是一种用于执行上sql语句的javaAPI,可以为多种关系型数据库提供统一访问接口.我们项目中经常用到的MySQL. ...
- Spark Streaming通过JDBC操作数据库
本文记录了学习使用Spark Streaming通过JDBC操作数据库的过程,源数据从Kafka中读取. Kafka从0.10版本提供了一种新的消费者API,和0.8不同,因此Spark Stream ...
- JDBC操作数据库的基本步骤:
JDBC操作数据库的基本步骤: 1)加载(注册)数据库驱动(到JVM). 2)建立(获取)数据库连接. 3)创建(获取)数据库操作对象. 4)定义操作的SQL语句. 5)执行数据库操作. 6)获取并操 ...
- springboot学习-jdbc操作数据库--yml注意事项--controller接受参数以及参数校验--异常统一管理以及aop的使用---整合mybatis---swagger2构建api文档---jpa访问数据库及page进行分页---整合redis---定时任务
springboot学习-jdbc操作数据库--yml注意事项--controller接受参数以及参数校验-- 异常统一管理以及aop的使用---整合mybatis---swagger2构建api文档 ...
随机推荐
- ORACLE TO_CHAR(SYSDATE,'D')
DDD是该天在一年内的第多少天,d是在一周内第几天,dd是一个月内的 DY :Day of week abbreviated Mon, Tue, Fri DAY :Day of week spelle ...
- PHP经典算法百钱买小鸡
遇到一道有趣的题,并计算2种方法的效率,发现如果穷举所有组合竟高达1000000次排列~所以简化到了600次.所以,你的一个条件,或者一个运算,可能会提高几千倍的效率! <?php header ...
- JSP九大内置对象简介
1.out对象,是JspWriter类的实例,是向客户端输出内容常用的对象 方法: void println() 向客户端打印字符串 void clear() 清除缓冲区的内容,如果在flush之后调 ...
- SQL SERVER 扩展属性的操作方法
将数据库迁移到 Azure SQL 数据库时出现错误,不支持扩展属性“MS_Description”,因此就如何操作扩展属性进行在此记录. 查询扩展属性 SELECT *,OBJECT_NAME(ma ...
- shell十三问?
shell 十三问: 1) 为何叫做 shell ? 2) shell prompt(PS1) 与 Carriage Return(CR) 的关系? 3) 别人 echo.你也 echo ,是问 ...
- 浙江省队选拔 ZJOI2015 (Round 1) 解题报告
最近莫名其妙地喜欢上了用这种格式写各省省选的全套题解= = 今年浙江省选的出题人是算法竞赛界传说级人物陈立杰,看样子他的出题风格很有特点……ABC三题难度是严格递减的,感觉如果在做第一题的时候被卡住的 ...
- mutiplemap 总结
之前只是在C++ Primer里面看过关联容器,可能因为没有实际用过,只是看看,所以导致用的时候并不熟悉: 在这之前,map和set的特性应该要了解,map是关联数组,也就是由键值对组成的,而set只 ...
- 【转载】VC操作剪切板
1.在剪切板上放置数据 if(OpenClipboard()) //打开剪切板{ EmptyClipboard(); //清空剪切板 CString str; //从控件 ...
- 请你谈谈cookie的利弊
以下均是自己理解和整理的,如果有错误请指出,谢谢O(∩_∩)O~~ 优点 极高的扩展性和可用性. 1) 数据持久性. 2) 不需要任何服务器资源.Cookie存储在客户端并在发送后由服务器读取. ...
- python mac环境搭建
安装 virtualenv $ sudo pip install virtualenv 然后建立一个测试目录: $ mkdir testvirtual $ cd testvirtual 就可以成功创建 ...