JDBC3.0  的增强支持BLOB,CLOB,ARRAY,REF数据类型。的ResultSet对象UPDATEBLOB(),updateCLOB(),updateArray()和updateRef()方法,使您可以在服务器上直接操作相应的数据。

JDBC提供了数据库batch处理的能力,在数据大批量操作(新增、删除等)的情况下可以大幅度提升系统的性能。

当几个SQL语句一次发送到数据库中,可以减少通信开销,从而提高性能。

  • JDBC驱动程序不支持此功能。您应该使用DatabaseMetaData.supportsBatchUpdates()方法来确定目标数据库支持批量更新处理。如果你的JDBC驱动程序支持此功能,则该方法返回true。

  • addBatch()方法的声明,PreparedStatement和CallableStatementis用于添加单个语句的批处理。 executeBatch()将开始执行的所有语句组合到一起。

  • executeBatch()将返回一个整数数组,每个数组元素的表示为相应的更新语句的更新计数。

  • 可以添加语句进行批处理,可以clearBatch()方法删除它们。此方法将删除addBatch()方法添加的所有语句。但是,你不能有选择性地选择语句来删除。

// 关闭自动执行 
con.setAutoCommit(false); 
Statement stmt = con.createStatement();

  禁用了自动执行模式,从而在调用 Statement.executeBatch() 时可以防止 JDBC 执行事务处理。禁用自动执行使得应用程序能够在发生错误及批处理中的某些命令不能执行时决定是否执行事务处理。因此,当进行批处理更新时,通常应该关闭自动执行。

  在JDBC 2.0 中,Statement 对象能够记住可以一起提交执行的命令列表。创建语句时,与它关联的命令列表为空。Statement.addBatch() 方法为调用语句的命令列表添加一个元素。如果批处理中包含有试图返回结果集的命令,则当调用 Statement. executeBatch() 时,将抛出 SQLException。

  只有 DDL 和 DML 命令(它们只返回简单的更新计数)才能作为批处理的一部分来执行。如果应用程序决定不提交已经为某语句构
造的命令批处理,则可以调用方法 Statement.clearBatch()(以上没有显示)来重新设置批处理。

 Statement.executeBatch() 方法将把命令批处理提交给基本 DBMS 来执行。命令的执行将依照在批处理中的添加顺序来进行。ExecuteBatch() 为执行的命令返回更新计数数组。数组中对应于批处理中的每个命令都包含了一项,而数组中各元素依据命令的执行顺序(这还是和命令的最初添加顺序相同)来排序。调用executeBatch() 将关闭发出调用的 Statement 对象的当前结果集(如果有一个结果集是打开的)。executeBatch() 返回后,将重新将语句的内部批处理命令列表设置为空。

如果批处理中的某个命令无法正确执行,则 ExecuteBatch() 将抛出BatchUpdateException。可以调用BatchUpdateException.getUpdateCounts() 方法来为批处理中成功执行的命令返回更新计数的整型数组。因为当有第一个命令返回错误时,Statement.executeBatch() 就中止,而且这些命令是依据它们在批处理中的添加顺序而执行的。所以如果 BatchUpdateException.getUpdateCounts() 所返回的数组包含 N 个元素,这就意味着在调用 executeBatch() 时批处理中的前 N 个命令被成功执行。

 try {
int row;
Connection connection = null;
// 关闭自动提交
connection.setAutoCommit(false);
String sql = "insert into tb_student(id,name,sex,age) values(?,?,?,?)";
PreparedStatement preparedStatement = (PreparedStatement) connection.prepareStatement(sql);
Random random = new Random();
for (int i = 0; i < 10; i++) {
preparedStatement.setInt(1, i + 1);
preparedStatement.setString(2, "学生" + i);
preparedStatement.setBoolean(3, i % 2 == 0 ? true : false);
preparedStatement.setInt(4, random.nextInt(5) + 10);
preparedStatement.addBatch(); //将for循环的一组参数添加到添加PreparedStatement对象的批处理命令中
}
int[] rows = preparedStatement.executeBatch(); //PreparedStatement对象的批处理SQL提交给数据库,返回跟新计数的数组
row = rows.length;
} catch (Exception e) {
e.printStackTrace();
}

返回:  10

也可以采用下面方式添加:

stmt.addBatch("insert into employee(id,name,sex,phone) values(1,"qg",1,"**********")");

JDBC - 数据流:

PreparedStatement对象有能力使用提供参数数据的输入和输出流。这使您可以将整个文件到数据库中,可容纳较大的值,如CLOB和BLOB数据类型的列。

有下列方法可用于流数据:

  1. setAsciiStream(): 此方法用于提供大的ASCII值。

  2. setCharacterStream(): 此方法用于提供大的UNICODE值。

  3. setBinaryStream(): 使用此方法,以提供大的二进制值。

setXXXStream()方法需要一个额外的参数,文件大小,除了参数占位符。此参数通知应发送多少数据的数据库,使用流的驱动程序。

JDBC批处理数据的更多相关文章

  1. Java JDBC批处理插入数据操作

    在此笔记里,我们将看到我们如何可以使用像Statement和PreparedStatement JDBC API来批量在任何数据库中插入数据.此外,我们将努力探索一些场景,如在内存不足时正常运行,以及 ...

  2. Java JDBC批处理插入数据操作(转)

    在此笔记里,我们将看到我们如何可以使用像Statement和PreparedStatement JDBC API来批量在任何数据库中插入数据.此外,我们将努力探索一些场景,如在内存不足时正常运行,以及 ...

  3. java中使用JDBC的preparedStatement批处理数据的添加

    在项目中我们偶尔可能会遇到批量向数据库中导入数据,如果批处理的情况较多的情况下可以使用spring batch,如果只是一个导入功能的话可以考虑使用jdbc的preparedStatement处理. ...

  4. mysql/oracle jdbc大数据量插入优化

    10.10.6  大数据量插入优化 在很多涉及支付和金融相关的系统中,夜间会进行批处理,在批处理的一开始或最后一般需要将数据回库,因为应用和数据库通常部署在不同的服务器,而且应用所在的服务器一般也不会 ...

  5. 一、JDBC的概述 二、通过JDBC实现对数据的CRUD操作 三、封装JDBC访问数据的工具类 四、通过JDBC实现登陆和注册 五、防止SQL注入

    一.JDBC的概述###<1>概念 JDBC:java database connection ,java数据库连接技术 是java内部提供的一套操作数据库的接口(面向接口编程),实现对数 ...

  6. mybatis批处理数据

    批处理数据主要有三种方式: 1.传统jdbc处理    2.mybatis批处理插入    3.使用executortype处理 jdbc 处理 1.通过 for循环插入 main方法如下所示: Co ...

  7. JAVA JDBC大数据量导入Mysql

    转自https://blog.csdn.net/q6834850/article/details/73726707?tdsourcetag=s_pctim_aiomsg 采用JDBC批处理(开启事务. ...

  8. mysql 存储过程在批处理数据中的应用

    最近批处理数据的时候,突然想到:为什么不使用存储过程进行数据批处理? 为什么要进行批处理? 自答:减少数据库连接次数,提高效率. 存储过程批处理数据的优点:一次编译,永久执行. 这次的批处理逻辑较简单 ...

  9. 【转】在Spring中基于JDBC进行数据访问时怎么控制超时

    http://www.myexception.cn/database/1651797.html 在Spring中基于JDBC进行数据访问时如何控制超时 超时分类 超时根据作用域可做如下层级划分: Tr ...

随机推荐

  1. MySql基础学习-总纲

  2. R语言入门基础

    教程:常用运算函数.对一般数据进行运算的常用函数: 1.round() #四舍五入 例:x <- c(3.1416, 15.377, 269.7) round(x, 0) #保留整数位 roun ...

  3. js设计模式理解干货

    构造函数本身就是一个函数,只不过该函数是出于创建对象的目的而定义的. 创建Object实例的两种方式: new 操作符 var person = new Object(); person.name = ...

  4. Mysql 高级部分

    MySQL 高级部分   (1)索引(index)..................................................................... 1 (2) ...

  5. python中sort()方法的cmp参数

    <python基础编程>里有讲到一段高级排序: “如果希望元素能按照特定的方式进行排序(而不是sort函数默认的方式,即根据python的默认排序规则按升序排列元素,第5章内对此进行讲解) ...

  6. 如何显示u盘的隐藏的文件

    方法/步骤   从U盘属性可以看出,U盘的大量空间被占用,U盘内有很多文件.   点击查看选项卡下的“选项”按钮 切换到中间的“查看”选项卡 取消勾选“隐藏受保护的操作系统文件” 在弹出的警告对话框, ...

  7. 缓存淘汰算法--LRU算法(转)

    (转自:http://flychao88.iteye.com/blog/1977653) 1. LRU1.1. 原理 LRU(Least recently used,最近最少使用)算法根据数据的历史访 ...

  8. 01-THREE.JS 第一个场景

    THREE.JS第一个场景 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...

  9. 33 python 并发编程之IO模型

    一 IO模型介绍 为了更好地了解IO模型,我们需要事先回顾下:同步.异步.阻塞.非阻塞 同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非 ...

  10. uva10815(set的应用)

    紫书例题,这道题的例程让我长了知识.以前没有用过cctype和stringstream相关的东西.很实用,值得学习. #include <cctype>的函数 c++中应该是#includ ...