executeBatch有何操作要点?
executeBatch()详解
JDBC提供了数据库batch处理的能力,在数据大批量操作(新增、删除等)的情况下可以大幅度提升系统的性能。
// 关闭自动执行
con.setAutoCommit(false);
Statement stmt = con.createStatement();
stmt.addBatch(“INSERT INTO employees VALUES (1000, ‘Joe Jones’)”);
stmt.addBatch(“INSERT INTO departments VALUES (260, ‘Shoe’)”);
stmt.addBatch(“INSERT INTO emp_dept VALUES (1000, 260)”);
// 提交一批要执行的更新命令
int[] updateCounts = stmt.executeBatch();
本例中禁用了自动执行模式,从而在调用 Statement.executeBatch() 时可以防止 JDBC 执行事务处理。禁用自动执行使得应用程序能够在发生错误及批处理中的某些命令不能执行时决定是否执行事务处理。因此,当进行批处理更新时,通常应该关闭自动执行。
在JDBC 2.0 中,Statement 对象能够记住可以一起提交执行的命令列表。创建语句时,与它关联的命令列表为空。Statement.addBatch() 方法为调用语句的命令列表添加一个元素。如果批处理中包含有试图返回结果集的命令,则当调用 Statement. executeBatch() 时,将抛出 SQLException。只有 DDL 和 DML 命令(它们只返回简单的更新计数)才能作为批处理的一部分来执行。如果应用程序决定不提交已经为某语句构
1
2
3
造的命令批处理,则可以调用方法 Statement.clearBatch()(以上没有显示)来重新设置批处理。
Statement.executeBatch() 方法将把命令批处理提交给基本 DBMS 来执行。命令的执行将依照在批处理中的添加顺序来进行。ExecuteBatch() 为执行的命令返回更新计数数组。数组中对应于批处理中的每个命令都包含了一项,而数组中各元素依据命令的执行顺序(这还是和命令的最初添加顺序相同)来排序。调用executeBatch() 将关闭发出调用的 Statement 对象的当前结果集(如果有一个结果集是打开的)。executeBatch() 返回后,将重新将语句的内部批处理命令列表设置为空。
如果批处理中的某个命令无法正确执行,则 ExecuteBatch() 将抛出BatchUpdateException。可以调用BatchUpdateException.getUpdateCounts() 方法来为批处理中成功执行的命令返回更新计数的整型数组。因为当有第一个命令返回错误时,Statement.executeBatch() 就中止,而且这些命令是依据它们在批处理中的添加顺序而执行的。所以如果 BatchUpdateException.getUpdateCounts() 所返回的数组包含 N 个元素,这就意味着在调用 executeBatch() 时批处理中的前 N 个命令被成功执行。用PreparedStatement 可以象下面这样写代码:
// 关闭自动执行
con.setAutoCommit(false);
PreparedStatement stmt = con.prepareStatement(“INSERT INTO employees VALUES (?, ?)”);
stmt.setInt(1, 2000);
stmt.setString(2, “Kelly Kaufmann”);
stmt.addBatch();
// 提交要执行的批处理
int[] updateCounts = stmt.executeBatch();
========================================
PrepareStatement 也是接口
PrepareStatement extends Statement
PrepareStatement 本身没有 int[] executeBatch() throws SQLException 方法
而是继承了Statement的方法,且它们都是接口没有实际实现方法,但Statement
接口对executeBatch()方法做了规范
/**
* Submits a batch of commands to the database for execution and
* if all commands execute successfully, returns an array of update counts.
每次提交一批命令到数据库中执行,如果所有的命令都成功执行了,那么返回一个
数组,这个数组是说明每条命令所影响的行数
* The int elements of the array that is returned are ordered
* to correspond to the commands in the batch, which are ordered
* according to the order in which they were added to the batch.
返回的数组中每个整型值都是排过序的,它们的顺序和批量处理中的命令们是一致的,
命令的顺序是按照它们被加到批处理中的顺序一致。
* The elements in the array returned by the method executeBatch
* may be one of the following:
executeBatch方法返回的数组中的元素可能是下面几种情形之一:
A number greater than or equal to zero – indicates that the
* command was processed successfully and is an update count giving the
* number of rows in the database that were affected by the command’s
* execution
一个大于或等于零的数字,简单说来命令成功执行后就返回它所影响到的行的数目
A value of SUCCESS_NO_INFO – indicates that the command was
* processed successfully but that the number of rows affected is
* unknown
* The constant indicating that a batch statement executed successfully
* but that no count of the number of rows it affected is available.
int SUCCESS_NO_INFO = -2;
常量SUCCESS_NO_INFO代表的值=-2,也就是说命令执行成功了但命令影响到的行数
无法统计,是未知的,只能返回SUCCESS_NO_INFO来说明命令执行情况。
* If one of the commands in a batch update fails to execute properly,
* this method throws aBatchUpdateException, and a JDBC
* driver may or may not continue to process the remaining commands in
* the batch.
如果批量处理时其中一个命令执行失败,则会抛出一个异常BatchUpdateException
JDBC驱动可能会停止剩余的命令,也可能继续执行剩余的命令。
* However, the driver's behavior must be consistent with a
* particular DBMS, either always continuing to process commands or never
* continuing to process commands.
不管怎样,驱动要怎么做取决于数据库管理系统的细节,总是执行或总是不执行两者其一。
* If the driver continues processing
* after a failure, the array returned by the method
*BatchUpdateException.getUpdateCounts
* will contain as many elements as there are commands in the batch, and
* at least one of the elements will be the following:
发生失败后如果驱动继续执行,通过BatchUpdateException.getUpdateCounts()方法返回
的数组应该包括批处理中有的那些命令的结果,并且至少有一个元素的值是下面的情况:
A value ofEXECUTE_FAILED-- indicates that the command failed
* to execute successfully and occurs only if a driver continues to
* process commands after a command fails
int EXECUTE_FAILED = -3;
指示命令没有成功执行的常量值EXECUTE_FAILED,并且只有在命令出错后驱动继续执行的情况下才会出现,
如果出错后不再执行,则返回的结果中没有错误信息只有那些被成功执行后的结果。
* A driver is not required to implement this method.
* The possible implementations and return values have been modified in
* the Java 2 SDK, Standard Edition, version 1.3 to
* accommodate the option of continuing to proccess commands in a batch
* update after aBatchUpdateExceptionobejct has been thrown.
驱动不实现此方法,可能会出现的实现和返回值在Java 2 SDK,Standard Edition,
version 1.3 ,以适应批处理时抛出BatchUpdateException 异常后是继续执行还是
终止执行的选项。
* @return an array of update counts containing one element for each
* command in the batch. The elements of the array are ordered according
* to the order in which commands were added to the batch.
返回一个和添加命令时的顺序一样的数组结果
* @exception SQLException if a database access error occurs or the
* driver does not support batch statements. Throws {@link BatchUpdateException}
* (a subclass ofSQLException) if one of the commands sent to the
* database fails to execute properly or attempts to return a result set.
* @since 1.3
*/
如果数据库访问异常或驱动不支持批处理命令,或者如果一个命令发送到数据库时失败或尝试取得结果,即使失败,都会抛一个异常BatchUpdateException 它是SQLException的子类。
标签: executeBatch
责任编辑:hnmd003
相关阅读
-
不支持中国电信2G/3G网络会对iPhone13系列用户造成影响吗?
近日,苹果支持官网显示,iPhone 13系列不支持中国电信2G 3G网络,引起了部分网友们的关注。其实,各...
2021-11-26 -
接收器模块的组件出现故障 iPhone12系列召回范围正在扩大
大家还记得吗,之前苹果曾给出了一个召回计划,针对在拨打或接听电话时出现声音问题的iPhone 12和iPhon...
2021-11-23 -
当前观察:平安不动产“借新还旧”2022年第三期15亿公司债票面利率定为4.10%
中华网财经6月27日讯深交所消息,近日,平安不动产有限公司披露2022年公开发行公司债券(面向专业投资者...
2022-06-27 -
今日热议:南通启东2宗宅地8.43亿挂牌 未设新房限价将于7月26日出让
6月24日,南通启东市吕四港镇挂牌2宗住宅地,将于7月26日采用“限地价+摇号”方式出让,均未设新房限价...
2022-06-27 -
【环球速看料】济南城市建设集团20亿公司债券发行结束 票面利率3.75%
6月24日,济南城市建设集团有限公司发布公开发行2022年可续期公司债券(第二期)发行结果公告。据观点新...
2022-06-27 -
世界速看:一周公告合辑丨偿债高峰来袭 房企流动性压力持续
鲁商服务通过港交所上市聆讯。世茂服务2021年收入83 434亿元同比增长66%。慕思股份今日上市发行价格38 93元 股
2022-06-27 -
引来阵阵叫好声 互联网账号“一键解绑”手机号被一些人看作是“最值得期待的服务”
据媒体报道,中国信息通信研究院近期上线一键解绑功能,用户可通过手机号查询注册绑定的互联网应用账号...
2022-06-27 -
热议:2021年全国住房公积金缴存额2.9万亿元 同比增长11.24%
6月24日,住房和城乡建设部、财政部、中国人民银行联合发布《全国住房公积金2021年年度报告》。2021年,...
2022-06-27 -
全球新资讯:鲁商生活服务:拟全球发售3334万股股份 发售价5.30-7.92港元
6月27日,鲁商生活服务股份有限公司发布全球发售公告。公告显示,公司拟全球发售3334万股股份,其中香港...
2022-06-27 -
环球微速讯:银亿股份:已进入《重整计划》执行阶段 完成资本公积金转增股本方案
6月26日,银亿股份有限公司发布关于公司重整计划执行进展的公告。公告显示,关于资本公积金转增股本方案...
2022-06-27 -
今日热门!广东:1—5月房地产开发投资0.60万亿元,同比下降3.2%
6月24日,广东统计信息网公布2022年1—5月广东房地产市场运行简况。1—5月,广东完成房地产开发投资0 6...
2022-06-27 -
结合区域实际和群众需求 丰台国有房屋租金减免第一阶段进度已达100%
北京市丰台区1+3+N政策组合拳已在多个领域持续推进。截至6月23日,丰台国有房屋租金减免第一阶段进度已...
2022-06-27 -
观速讯丨鲁商服务拟全球发售3334万股 发售价5.30-7.92港元
6月27日,鲁商生活服务股份有限公司公告称,该公司拟全球发售3334万股股份,其中香港发售股份333 4万股...
2022-06-27
阅读排行
资讯播报
- 世界播报:贝壳重生
- 世界今亮点!多地“解绑”非中心...
- 视点!锂电池自放电测量方法:动...
- 【世界时快讯】【地评线】中安时...
- 环球快讯:【2022中国有约】宁夏...
- 天天热文:基于NSGA-Ⅱ算法对发...
- 【天天热闻】损害大、成瘾快、花...
- 环球最新:广西启动花样滑冰“选...
- 每日聚焦:“在突破中传承,在传...
- 每日报道:男选手19年来首次颗粒...
- 当前速读:华裔乒乓球运动员倪夏...
- 每日热门:游泳世锦赛,中国跳水...
- 快报:【地评线】紫金e评:“好...
- 当前动态:北京金泰地产拟底价575...
- 焦点滚动:绿景控股正式退市,公...
- 每日视讯:国内首发┃整车级LTE-...
- 【时快讯】公维洁:强制性国家标...
- 全球快报:【大美边疆行】乌拉盖...
- 全球简讯:合肥松绑楼市“放大招...
- 当前速读:锂电池自放电测量方法...
- 今日播报!公务员进村卖房:没有销...
- 华英会两大公会——江晨&腾飞公...
- 天天速讯:游泳世锦赛:中国花游...
- 每日简讯:津门虎队赢得两连胜
- 当前热议!“混编”国足将出战东亚杯
- 世界热资讯!专为大型电动汽车打...
- 当前滚动:2022年第二届银川沿黄...
- 全球热讯:游泳世锦赛花游项目结...
- 每日热闻!荣盛发展:拟4.92亿元...
- 【世界热闻】雅居乐获得8.94亿港...
- 每日速递:领地控股:已根据交换...
- 当前信息:“天空地网”全覆盖监...
- 环球热资讯!场边VAR设备被晒爆...
- 全球视点!麒麟电池相关专利情况
- 当前播报:建发物业:张国钧辞任...
- 世界时讯:大美边疆|他们,守护...
- 天天观热点:荣万家:刘勇罡因个...
- 世界热文:大美边疆行·黑龙江丨...
- 每日热议!空气悬挂在新能源汽车...
- 每日关注!国内唯一“三高一多”...
- 全球球精选!守好“中国粮仓” ...
- 仁膳和元酵素在人体的功用,不可不知!
- 新五年 新玩法 新生态|《大国...
- 爱慕股份旗下女士家居服合集,夏...
- 广东华兴银行亮相第十一届金交会...
- 芙艾联合艾尔建学苑成功举办2022...
- 世界微头条丨2022年离校未就业高...
- 当前讯息:太不容易!别辜负TA~
- 世界视讯!【走进县城看发展】河...
- 【独家】新华全媒+|把饭碗牢牢端...
- 全球快报:成都大运会延期至2023...
- 【天天快播报】南京:计划将筹集...
- 全球快资讯:中南建设:控股股东...
- 世界热文:夜读·房企融资|中国...
- 世界今日讯!西门子工程咨询服务...
- 世界微头条丨万科斥资约5179.79...
- 今日播报!融创房地产:“PR融创0...
- 环球聚焦:不撞?怎么知道汽车安...
- 今亮点!再次征战世预赛 中国...
- 世界观热点:上海汽检顺利完成20...
- 【快播报】上海汽检汽车NVH开发...
- 滚动:国乒WTT冠军赛名单出炉:...
- 环球新动态:第31届世界大学生夏...
- 速讯:嘎玛顿东:我的家在高原,...
- 热门:三人篮球世界杯:小组赛1...
- 热文:学习总书记用典|习近平在...
- 天天观天下!一场中超比赛之后,...
- 环球滚动:金观平:坚持防汛抗旱...
- 每日观点:【地评线】太阳鸟时评...
- 世界速读:商用车惯性试验台
- 天下秀旗下虹宇宙联手艾菲奖,开...
- 大众通信云呼小号入驻华为云云商...
- 福瑞达生物股份荣膺“2021山东社...
- 福瑞达生物股份荣获2021年度“美...
- 共祭中华人文始祖 同品金徽美酒...
- 膜法世家牵手王心凌,实力出圈全...
- 中安建培:赋能建工企业 成就职...
- 饮水升级|昆仑山矿泉水连续6年...
- 随着支付行业大环境改变,代理商...
- 专访REVA执行总裁Kunov.Alidor:...
- “猕猴桃女孩”请查收脱毛指令!...
- 波司登发布21/22财年财报:营收...
- 云启点“支付+”场景拓展,助力...
- 蓝河绵羊奶亲和好吸收,用满满营...
- 依托深圳供电局“双碳大脑”平台...
- 空间公式 创想装搭丨2022东鹏空...
- 多数跨国公司仍将中国视为首要市...
- 开护肤品店,当然选有保障的嘉柏...
- LG新能源新建电池研发中心 扩大...
- 全球要闻:平安不动产:拟发行15...
- 焦点讯息:恒大地产:拟召开“15...
- 今热点:中国奥园:回笼资金1.05...
- 视焦点讯!和讯曝财报丨佳兆业美...
- 1—5月我国对外承包工程完成营业...
- 看热讯:中国双胞胎组合王柳懿/...
- 【全球时快讯】北京城建:25亿元...
- 对外开放不断扩大 我国基本建立...
- 焦点日报:怎么报考、待遇如何、...
- 包容性大幅提升 我国资本市场服...
- 预订及咨询量较5月同期均翻了一...