当前位置: 首页 > 编程笔记 >

什么是JDBC中的参数化批处理更新?举例说明一下?

林意蕴
2023-03-14
本文向大家介绍什么是JDBC中的参数化批处理更新?举例说明一下?,包括了什么是JDBC中的参数化批处理更新?举例说明一下?的使用技巧和注意事项,需要的朋友参考一下

将一组INSERT或UPDATE或DELETE命令(产生更新计数值)组合在一起并立即执行它们,此机制称为批量更新。

如果您使用批处理更新传递带有参数的查询,则称为参数化批处理更新。

通常,要执行批处理更新,您需要使用addBatch()方法添加所有必需的语句,并使用executeBatch()方法执行它们,如下所示:

//创建一个Statement对象
Statement stmt = con.createStatement();
//设置自动提交false-
con.setAutoCommit(false);
//将语句添加到批处理
stmt.addBatch("INSERT INTO Sales VALUES ('KeyBoard', 'Amith', 'January', 1000, 'Hyderabad')");
stmt.addBatch("INSERT INTO Sales VALUES ('Earphones', 'SUMITH', 'March', 500, 'Vishakhapatnam')");
stmt.addBatch("INSERT INTO Sales VALUES ('Mouse', 'Sudha', 'September', 200, 'Vijayawada')");
//执行批处理
stmt.executeBatch();

如果您在此处观察上述代码,则我们将语句的特定部分一次又一次地添加到批处理中,而不是此操作,您可以执行参数化的批处理更新,在此使用准备好的语句并创建带有占位符和传递值的查询使用setter方法将这些占位符传递给这些占位符。

在添加值时,您需要将查询的每组值添加到批处理中,然后立即执行它们。

创建参数化的批量更新

要创建参数化的批处理更新,您需要创建一个准备好的语句以使用占位符插入,更新或删除值。

使用setXXX()语句将值设置为占位符和参数。使用addbatch()方法将每组值添加到批处理中,最后使用executeBatch方法执行批处理。

注意:在将语句添加到批处理之前,您需要使用con.setAutoCommit(false)关闭自动提交,并且在执行批处理之后,需要使用con.commit()方法保存更改。

示例

假设我们在数据库中创建了一个名为Sales的表,并具有以下描述:

+-------------------+--------------+------+-----+---------+-------+
| Field             | Type         | Null | Key | Default | Extra |
+-------------------+--------------+------+-----+---------+-------+
| Product_Name      | varchar(255) | YES  |     | NULL    |       |
| Name_Of_Customer  | varchar(255) | YES  |     | NULL    |       |
| Month_Of_Dispatch | varchar(255) | YES  |     | NULL    |       |
| Price             | int(11)      | YES  |     | NULL    |       |
| Location          | varchar(255) | YES  |     | NULL    |       |
+-------------------+--------------+------+-----+---------+-------+

本示例尝试使用参数化批处理更新将一组语句插入上述表中。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Statement;
public class ParameterizedBatchUpdate {
   public static void main(String args[])throws Exception {
      //获得连接
      String mysqlUrl = "jdbc:mysql://localhost/testDB";
      Connection con = DriverManager.getConnection(mysqlUrl, "root", "password");
      System.out.println("Connection established......");
      //创建一个Statement对象
      Statement stmt = con.createStatement();
      //设置自动提交false-
      con.setAutoCommit(false);
      PreparedStatement pstmt = con.prepareStatement("INSERT INTO Sales VALUES (?, ?, ?, ?, ?)");
      pstmt.setString(1, "KeyBoard");
      pstmt.setString(2, "Amith");
      pstmt.setString(3, "January");
      pstmt.setInt(4, 1000);
      pstmt.setString(5, "Hyderabad");
      pstmt.addBatch();

      pstmt.setString(1, "Earphones");
      pstmt.setString(2, "Sumith");
      pstmt.setString(3, "March");
      pstmt.setInt(4, 500);
      pstmt.setString(5, "Vishakhapatnam");
      pstmt.addBatch();

      pstmt.setString(1, "Mouse");
      pstmt.setString(2, "Sudha");
      pstmt.setString(3, "September");
      pstmt.setInt(4, 500);
      pstmt.setString(5, "Vishakhapatnam");
      pstmt.addBatch();

      //执行批处理
      stmt.executeBatch();
      //保存更改
      con.commit();
      System.out.println("Records inserted......");
   }
}

输出结果

Connection established......
Records inserted......
 类似资料:
  • 本文向大家介绍什么是stub?举例说明相关面试题,主要包含被问及什么是stub?举例说明时的应答技巧和注意事项,需要的朋友参考一下 stub用于模块的行为。测试时,stub可以为函数调用返回模拟的结果。比如说,我们写文件时,实际上并不需要真正去写。 Stub是用于模拟一个组件/模块的一个函数或程序。在测试用例中,Stub可以为函数调用提供封装的答案。 当然,你还可以在断言中指明Stub是如何被调用

  • 本文向大家介绍举例说明什么是IIFEs?它有什么好处?相关面试题,主要包含被问及举例说明什么是IIFEs?它有什么好处?时的应答技巧和注意事项,需要的朋友参考一下 Instantly Invoked Function Expression 即时调用函数表达式 示例 最好在 IIFE 前追加分号 来避免解析时与前一个表达式合并出现问题 好处 创建一个局部作用域隔离变量;但在 ES6 拥有了块级作用域

  • 本文向大家介绍举例说明什么是decodeURI()和encodeURI()是什么?相关面试题,主要包含被问及举例说明什么是decodeURI()和encodeURI()是什么?时的应答技巧和注意事项,需要的朋友参考一下 :将 URI 中的每个字符编码为 1-4 个格式为 的转义序列(xx 为十六进制数),但不包括 ASCII 数字、字母、URL 分隔符(、、、、...)、以及其他部分 ASCII

  • 本文向大家介绍举例说明什么是短路求值?相关面试题,主要包含被问及举例说明什么是短路求值?时的应答技巧和注意事项,需要的朋友参考一下 短路求值即利用 (逻辑或) 和 (逻辑与)的短路特性进行赋值: 当值为truthy时,取的值,否则取。这样可以避免被赋为、、、等值。 当值为truthy时,再去取并返回其值,否则返回。这样可以避免为空时,报空指针异常。

  • 问题内容: 对于Java-JDBC API和Oracle数据库,我有一个稍微独特的要求。我将autoCommit设置为默认值,这对于Oracle是正确的,并且我使用的示例与此链接相似。 但是,当我添加说1000批次时,可以说每个批次都是插入的。并且让我们假设大约20条记录违反了某些约束,我希望其余980条变为COMMITTED(并且以后对使用任何其他连接的任何其他查询都可见)到数据库,并忽略20条

  • 本文向大家介绍举例说明constructor和instanceof的区别是什么?相关面试题,主要包含被问及举例说明constructor和instanceof的区别是什么?时的应答技巧和注意事项,需要的朋友参考一下 是 的属性之一, 是运算符 的结果是方法, 的结果是布尔值 获取的是原型链的最顶层, 可以判断是否属于原型链的任意一层