数据库程序接口——JDBC——功能第五篇——批量处理
综述
批量处理一般指批量插入,批量更新,删除通过可以指定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——功能第五篇——批量处理相关推荐
- java获取hana接口数据,SAP Hana 数据库编程接口 - JDBC
Hana JDBC 驱动 安装 SAP HANA Client 后,安装目录的 ngdbc.jar 就是 JDBC 数据库驱动.主要注意 url 的写法和 Driver 的名称 : Driver: c ...
- 微信小程序实现比较功能的五种方法
首先在index.wxml页面写一个测试页面 如图: 代码如下 接下来就是比较功能的实现 第一种方法 首先在两个input组件中用bindchange方法绑定事件处理函数,在button组件中用bin ...
- 微信小程序商城项目实战(第五篇:购物车)
实现购物车 json里边设置一下页面标题"navigationBarTitleText": "购物车" 界面组成 上方由一个按钮跳转到收货地址管理, 中间为购物 ...
- 程序员转正述职报告_程序员转正的述职报告【五篇】
[导语]述职报告是指各级各类机关工作人员,一般为业务部门陈述以主要业绩业务为主,少有职能和管理部门陈述.---以下是无忧考网为您提供的文章,欢迎阅读. [篇一] 来到一个新的工作环境,最能发现自身的不 ...
- [Java 基础]-- java提供的访问数据库的接口(jdbc)
JDBC java提供的一套访问数据库接口 java--->操作数据库 JDBC发展历史:[了解] TYPE1:JDBC--odbc桥:间接访问数据库//odbc是c语言的jdbc TYPE2: ...
- 【学习笔记】JDBC:java提供的专门操纵数据库的API JDBC驱动程序的类型 JDBC常用的类与接口
JDBC技术 JDBC的全称是Java DataBase Connectivity,是一套面向对象的应用程序接口,指定了统一的访问各种关系型数据库的标准接口,JDBC是一种底层的API,因此访问数据库 ...
- 【Python五篇慢慢弹】快速上手学python
快速上手学python 作者:白宁超 2016年10月4日19:59:39 摘要:python语言俨然不算新技术,七八年前甚至更早已有很多人研习,只是没有现在流行罢了.之所以当下如此盛行,我想肯定是多 ...
- 第五篇:Visual Studio 2008 Web开发使用的新特性
第五篇:Visual Studio 2008 Web开发使用的新特性 本篇翻译自MSDN. .NET Framwork 3.5与Visual Studio 2008 包含很多新特性.AJAX的Web开 ...
- java 登录按钮响应数据库_用户登录功能的实现—从前端到后台(包括数据库)...
温馨提示:本文难度有点大,建议收藏后在阅读! 首先给大家分享一件糗事! 本来今天这篇文会很长的 写到一半突然发现 还没有给大家分享 数据库 jdbc MVC模式 直接就来分享实战了 我的锅! 源码会分 ...
最新文章
- Go 知识点(05)— 类型别名与类型定义
- 使用PHP+Sphinx建立高效的站内搜索引擎
- 如何快速使用Leangoo看板工具进行项目协作?
- Java8新特性总结 -7.新API和工具
- leetcode题目:第 k 个数
- android Linkify的用法
- 2019-08-12 计划与安排
- esp32-智能语音-mp3(sdcard)
- 09-Mysql数据库----外键的变种
- C# 静态变量及静态函数
- 360环视TOP10供应商榜单发布!未来五年市场规模将超300亿元
- 电脑无故关机,出现提示:从异常关机中恢复 bluescreen.........
- 全国建筑模架业内人士齐聚联筑赚 携手并进同发展
- 计算机一级c云大,云南大学网红C位易主!新晋流量霸主竟然是……
- html5脑图_使用HTML5技术绘制思维导图
- win10控制面板快捷键_你没玩过的全新版本Win10,这些操作你知多少?
- Wifi密码 (10分)
- java中这些判断空的用法,太优雅了
- ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilit
- 555定时器的基本原理和应用案例