综述

批量处理一般指批量插入,批量更新,删除通过可以指定where条件实现。批量插入的实现方式有三种类型。statement,preparedStatement,callableStatement。

Java代码

/*** 演示批量插入的三种方式* @throws SQLException*/
public static void batchInsert() throws SQLException
{// 使用Statement对象进行批量插入,可以执行不同的sql语句
  insertByStatement();// 使用PreStatement对象进行批量插入,一条sql语句,多行参数
  insertByPreparedStatement();// 使用CallableStatement对象进行批量插入,一条存储过程,多行参数,当表结构修改时,只需要修改存储过程。
  insertByCallableStatement();
}

Statement方式

Statement方式批量执行SQL的优点在于可以执行多条SQL语句,缺点也很明显,需要改变SQL语句时需要修改程序,每次执行都需要重新编译SQL。下面通过举例说明。

示例演示往数据库student表,book表中批量插入数据。

student表有四个字段,stu_name(学号,INTEGER类型),stu_name(名称,varchar2(200)),stu_age(年龄,INTEGER类型),stu_class(班级,varchar2(200))。

  CREATE TABLE "STUDENT" (    "STU_NUM" NUMBER(*,0), "STU_NAME" VARCHAR2(200), "STU_AGE" NUMBER(*,0), "STU_CLASS" VARCHAR2(200))

book表中有四个字段,num(编号,INTEGER类型),name(名称,varchar2(200)),type(类型,varchar2(200))。

CREATE TABLE "SYSTEM"."BOOK"
( "NUM" NUMBER(*,0), "NAME" VARCHAR2(200), "TYPE" VARCHAR2(200)
)

Java代码

 /*** 通过Statement对象进行批量插入* @throws SQLException*/private static void insertByStatement() throws SQLException{// 获取连接对象Connection conn = ConnectionUtil.getConn();// 获取Statement对象Statement state = conn.createStatement();// 不同的sql语句,不同的表, studentSql为插入student表,bookSql为插入book表// stu_num(学号),stu_name(名称),stu_age(年龄),stu_class("班级")String studentSql = "insert into student values(1,'test1',25,'333班')";// num(图书编号),name(名称),type(类型)String bookSql = "insert into book values(1,'book1','杂志')";// 添加sql语句,
    state.addBatch(studentSql);state.addBatch(bookSql);// 执行sql
    state.executeBatch();// 清空批量
    state.clearBatch();// 关闭statement对象
    state.close();}

PreparedStatement方式

PreparedStatement优点是SQL语句结构不变,并且经过预编译,所以一般适用于一条SQL语句,多行参数。对于插入场景很适用。但是需要知道表中拥有哪些字段,如何设置这些值,如果表结构修改,需要修改代码。

Java代码

/*** 通过PreparedStatement对象进行批量插入* @throws SQLException*/
private static void insertByPreparedStatement() throws SQLException
{// 获取连接对象Connection conn = ConnectionUtil.getConn();// 插入Sql语句String insertSql = "insert into student values(?,?,?,?)";// 获取PreparedStatement对象PreparedStatement preStatement = conn.prepareStatement(insertSql);// 设置参数for(int i=2;i<100;i++){// 添加批量执行批量,相比于Statement的方式,一条sql语句,多行参数,适用于单表插入setPreparedStatementParam(preStatement, i, "test"+i, 23, "333班");preStatement.addBatch();}preStatement.executeBatch();// 清空批量,关闭对象
  preStatement.clearBatch();preStatement.close();
}/*** 为PreparedStatement对象设置参数* @param preStatement PreParedStament对象* @param stuNum 学号* @param name 姓名* @param age 年龄* @param stuClass 班级* @throws SQLException */
private static void setPreparedStatementParam(PreparedStatement preStatement, int stuNum, String name, int age,String stuClass) throws SQLException
{preStatement.setInt(1, stuNum);preStatement.setString(2, name);preStatement.setInt(3, age);preStatement.setString(4, stuClass);
}

CallableStatement方式

CallableStatement的方式优点在于只需要了解存储过程中的使用,不需要了解表结构,当表结构改变时,不用修改程序.

存储过程

create or replace procedure insertStudentProc
(stu_num in INTEGER,name in varchar2)
as
begininsert into student values(stu_num,name,25,'存储过程');commit;
end;

Java代码

/*** 通过CallableStatement对象进行批量插入* @throws SQLException */
private static void insertByCallableStatement() throws SQLException
{// 获取连接对象Connection conn = ConnectionUtil.getConn();// 第一个参数为学号,第二个参数为名称String callSql = "{call insertStudentProc(?,?)}";// 创建CallableStatement对象CallableStatement callStatement = conn.prepareCall(callSql);// 设置参数for(int i=100;i<200;i++){setCallableStatementParam(callStatement, i, "test"+i);callStatement.addBatch();}// 执行批量操作
  callStatement.executeBatch();// 清空批量,关闭对象
  callStatement.clearBatch();callStatement.close();
}/*** 为CallableStatement对象设置参数* @param callStatement CallableStatement对象* @param stuNum 学号* @param name 姓名* @throws SQLException */
private static void setCallableStatementParam(CallableStatement callStatement,int stuNum,String name) throws SQLException
{callStatement.setInt(1, stuNum);callStatement.setString(2, name);
}

至此本篇内容结束

转载于:https://www.cnblogs.com/rain144576/p/6971656.html

数据库程序接口——JDBC——功能第五篇——批量处理相关推荐

  1. java获取hana接口数据,SAP Hana 数据库编程接口 - JDBC

    Hana JDBC 驱动 安装 SAP HANA Client 后,安装目录的 ngdbc.jar 就是 JDBC 数据库驱动.主要注意 url 的写法和 Driver 的名称 : Driver: c ...

  2. 微信小程序实现比较功能的五种方法

    首先在index.wxml页面写一个测试页面 如图: 代码如下 接下来就是比较功能的实现 第一种方法 首先在两个input组件中用bindchange方法绑定事件处理函数,在button组件中用bin ...

  3. 微信小程序商城项目实战(第五篇:购物车)

    实现购物车 json里边设置一下页面标题"navigationBarTitleText": "购物车" 界面组成 上方由一个按钮跳转到收货地址管理, 中间为购物 ...

  4. 程序员转正述职报告_程序员转正的述职报告【五篇】

    [导语]述职报告是指各级各类机关工作人员,一般为业务部门陈述以主要业绩业务为主,少有职能和管理部门陈述.---以下是无忧考网为您提供的文章,欢迎阅读. [篇一] 来到一个新的工作环境,最能发现自身的不 ...

  5. [Java 基础]-- java提供的访问数据库的接口(jdbc)

    JDBC java提供的一套访问数据库接口 java--->操作数据库 JDBC发展历史:[了解] TYPE1:JDBC--odbc桥:间接访问数据库//odbc是c语言的jdbc TYPE2: ...

  6. 【学习笔记】JDBC:java提供的专门操纵数据库的API JDBC驱动程序的类型 JDBC常用的类与接口

    JDBC技术 JDBC的全称是Java DataBase Connectivity,是一套面向对象的应用程序接口,指定了统一的访问各种关系型数据库的标准接口,JDBC是一种底层的API,因此访问数据库 ...

  7. 【Python五篇慢慢弹】快速上手学python

    快速上手学python 作者:白宁超 2016年10月4日19:59:39 摘要:python语言俨然不算新技术,七八年前甚至更早已有很多人研习,只是没有现在流行罢了.之所以当下如此盛行,我想肯定是多 ...

  8. 第五篇:Visual Studio 2008 Web开发使用的新特性

    第五篇:Visual Studio 2008 Web开发使用的新特性 本篇翻译自MSDN. .NET Framwork 3.5与Visual Studio 2008 包含很多新特性.AJAX的Web开 ...

  9. java 登录按钮响应数据库_用户登录功能的实现—从前端到后台(包括数据库)...

    温馨提示:本文难度有点大,建议收藏后在阅读! 首先给大家分享一件糗事! 本来今天这篇文会很长的 写到一半突然发现 还没有给大家分享 数据库 jdbc MVC模式 直接就来分享实战了 我的锅! 源码会分 ...

最新文章

  1. Go 知识点(05)— 类型别名与类型定义
  2. 使用PHP+Sphinx建立高效的站内搜索引擎
  3. 如何快速使用Leangoo看板工具进行项目协作?
  4. Java8新特性总结 -7.新API和工具
  5. leetcode题目:第 k 个数
  6. android Linkify的用法
  7. 2019-08-12 计划与安排
  8. esp32-智能语音-mp3(sdcard)
  9. 09-Mysql数据库----外键的变种
  10. C# 静态变量及静态函数
  11. 360环视TOP10供应商榜单发布!未来五年市场规模将超300亿元
  12. 电脑无故关机,出现提示:从异常关机中恢复 bluescreen.........
  13. 全国建筑模架业内人士齐聚联筑赚 携手并进同发展
  14. 计算机一级c云大,云南大学网红C位易主!新晋流量霸主竟然是……
  15. html5脑图_使用HTML5技术绘制思维导图
  16. win10控制面板快捷键_你没玩过的全新版本Win10,这些操作你知多少?
  17. Wifi密码 (10分)
  18. java中这些判断空的用法,太优雅了
  19. ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilit
  20. 555定时器的基本原理和应用案例

热门文章

  1. sql中的where 1=1有什么用?
  2. 数组去重(JavaScript)先从网上整理一波,待验证
  3. 三维重建13:点云的局部特征总结
  4. containerd项目正式从CNCF毕业
  5. java url编码解码
  6. Hadoop 集群搭建
  7. Windows Phone 8 企业应用部署指南(二)
  8. 用vi在linux下查看16进制文件
  9. Flutter Mac下环境配置
  10. Ubuntu Linux系统中出现jupyter notebook不能自动打开浏览器