JDK6笔记(5)----JDBC4(4)

简介: 版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/1556449 JDK6笔记(5)----JDBC4(4)1、利用批处理更新要提高性能,JDBC API提供了一个批处理更新方式,它允许你一次进行多种更新。
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/1556449

JDK6笔记(5)----JDBC4(4)


1、利用批处理更新
要提高性能,JDBC API提供了一个批处理更新方式,它允许你一次进行多种更新。
Statement、PreparedStatement、CallableStatement都支持批处理更新方式。
2、在Statement对象中使用批处理更新
Statement对象可以用单个的执行语句对DBMS进行一系列的更新。
Statement对象在初始化时,仅进行空批处理list的初始化;因此你必须调用Statement.addBatch方法来增加SQL命令到Statement对象。SQL命令必须返回一个update count,而不是别的任何类型。
要更好地处理批处理命令,你应该总是设置auto-commit(自动提交)为false,因此DBMS驱动只会在你告诉它需要做时它才进行提交。
这就给了一个清除批处理命令的chance,你可以使用Statement.clearBatch()方法来做,它将把Statement对象的所有批处理命令list。
如果批处理命令成功执行了,它将自动清除list。
当Statement.executeBatch()成功执行后,将返回一个update count的队列。它包含下面的东东:
1)为0或更大的值,它意味着命令得到了成功的处理。如果值大于0,它表示命令在执行后,受到影响的行数。
2)一个Statement.SUCCESS_NO_INFO,意味着特别的命令得到了成功处理。但是,它不包含任何信息,如受影响的行数等。
如果批处理命令执行失败,将抛出BatchUpdateException错误。某些数据库驱动可以继续进行下面的命令,但很多则是停止执行。
不是所有的JDBC驱动器都支持批处理更新。故在使用时你要注意看你的driver是否支持batch update。
如果你不清楚,用DatabaseMetaData.supportsBatchUpdates()方法来查看。
见下面一个例子:
try{
 //Make sure that autocommit is off
 cConn.setAutoCommit(false);
 //Retrieve metadata info about the data source
 DatabaseMetaData dbmData=cConn.getMetaData();
 //Make sure our driver supports batch updates
 if(dbmData.supportsBatchUpdates()){
  Statement sStatement=cConn.createStatement();
  //Add batch commands
  sStatement.addBatch("INSERT INTO TEAMS VALUES ('Tom')");
  sStatement.addBatch("INSERT INTO TEAMS VALUES ('Roger')");
  sStatement.addBatch("INSERT INTO TEAMS VALUES ('Jon')");
  sStatement.addBatch("INSERT INTO TEAMS VALUES ('Julia')");
  sStatement.addBatch("INSERT INTO TEAMS VALUES ('George')");
  int[] uCounts=sStatement.executeBatch();
  //Commit the changes
  cConn.commit();
 }else{
  System.err.print("Your driver does not support batch updates!")
  }
 }catch(BatchUpdateException batchEx){
  int[] uCounts=batchEx.getUpdateCounts();
  for(int i=0;i<uCounts.length;i++)
   System.err.print("Count #"+i+"="+uCounts[i]+"/n");
  }
 }

3、在PreparedStatement对象中使用Batch Update
基本上与Statement中的方法相同,见下面的例子:
try{
 //Make sure that autocommit is off
 cConn.setAutoCommit(false);
 //Retrieve metadata info about the data source
 DatabaseMetaData dbmData=cConn.getMetaData();
 //Make suer our driver supports batch updates
 if(dbmData.supportsBatchUpdates()){
  PrparedStatement psStatement=cConn.prepareStatement("INSERT INTO TEAMS VALUES(?)");
  //Set the IN parameter
  psStatement.setString(1l"Jennie Vitale");
  //Add batch command
  psStatement.addBatch();
  //Set the IN parameter for the next command
  psStatement.setString(1,"Andrew Vitale");
  //Add batch command
  psStatement.addBatch();
  int[] uCounts=psStatement.executeBatch();
  //Commit the changes
  cConn.commit();
 }else{
  System.err.print("Your driver does not support batch updates!");
 }
}catch(BatchUpdateException batchEx){
}
 

目录
相关文章
|
1月前
|
Java 关系型数据库 MySQL
自动化测试项目实战笔记(一):JDK、Tomcat、MySQL、Jpress环境安装和搭建
这篇文章是关于自动化测试项目实战笔记,涵盖了JDK、Tomcat、MySQL、Jpress环境的安装和搭建过程,以及测试用例和常见问题总结。
48 1
自动化测试项目实战笔记(一):JDK、Tomcat、MySQL、Jpress环境安装和搭建
|
6月前
|
Java
JDK动态代理笔记整理
JDK动态代理笔记整理
|
Java 程序员
终于不慌内卷了,多亏阿里内部的并发图册+JDK源码速成笔记
并发编程 Java并发在近几年的面试里面可以说是面试热点,每个面试官面试的时候都会跟你扯一下并发,甚至是高并发。面试前你不仅得需要弄清楚的是什么是并发,还得搞清什么是高并发! 在这里很多小白朋友就会很疑惑:我工作又不用,为啥面试总是问?真就内卷卷我呗!(手动狗头)互联网内卷已经是现在的行业趋势,而且是不可逆的,这个大家也知道;但LZ要说的是,虽然简单地增删改查并不需要并发的知识,但是业务稍微复杂一点,你的技术水平稍微提升一点的话你就会知道,并发是我们Java程序员绕不开的一道坎。
50 0
Alibaba新产:“Java并发笔记”闪耀来袭,JDK源码奥义尽在其中
JDK是Java语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。 没有JDK的话,无法编译Java程序(指java源码.java文件),如果想只运行Java程序(指class或jar或其它归档文件),要确保已安装相应的JRE。
直击灵魂!美团大牛手撸并发原理笔记,由浅入深剖析JDK源码
并发编程这四个字想必大家最近都在网上看到过有很多的帖子在讨论。我们都知道并发编程可选择的方式有多进程、多线程和多协程。在Java中,并发就是多线程模式。而多线程编程也一直是一个被广泛而深入讨论的领域。如果遇到复杂的多线程编程场景,大多数情况下我们就需要站在巨人的肩膀上利用并发编程框架——JDK Concurrent包来解决相关线程问题。
|
Java 开发者 容器
先到先学!Alibaba甩出第四次更新的JDK源码高级笔记(终极版)
作为Java开发者,面试肯定被问过多线程。对于它,大多数好兄弟面试前都是看看八股文背背面试题以为就OK了;殊不知现在的面试官都是针对一个点往深了问,你要是不懂其中原理,面试就挂了。可能你知道什么是进程什么是线程,但面试官要是问你进程之间是如何通讯的?ConcurrentHashMap 和 HashTable有什么区别?为什么wait和notify方法要在同步块代码中调用?你答不上来就只能等通知了。。。
|
Java Linux
【笔记03】CentOS 安装 jdk
(1) 创建 softwarezgq 目录,用于存放软件安装包
142 0
【笔记03】CentOS 安装 jdk
|
SQL Java 数据库连接
JDK6笔记(5)----JDBC4
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/1554793 JDK6...
997 0
|
SQL Java 数据库连接
JDK6笔记(5)----JDBC4(2)
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/1555630 JDK6笔记(5)----JDBC4(2) 1、理解Statements有三种类型的Statements:1)Statements接口它通常用于只需不带参数的SQL语句。
662 0
|
SQL Java 数据库连接
JDK6笔记(5)----JDBC4(3)
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/1556016 JDK6笔记(5)----JDBC4(3) 1、预准备语句的IN参数的pitfall当你用setter方法向IN参数传递值时要注意一些问题。
785 0