使用 JDBC 批量删除和插入

2024-03-19

我想知道是否可以使用批处理来执行参数化 DELETE 和 INSERT 语句。我知道如何插入多行,但是,我首先想做一个 DELETE 语句(这需要不同的参数)。 以下是我插入多个语句的方法:

        String query = "INSERT INTO " + TABLE + "(FOO, BAR) VALUES (?,?);";

        PreparedStatement sql = connection.prepareStatement(query);

        for(...){
            sql.setString(1, fooValue);
            sql.setInt(2, barValue);
            sql.addBatch();
        }       

        sql.executeBatch();

        sql.close();

对于删除部分:

使用 addBatch 然后executeBatch:

Statement st = con.createStatement();
st.addBatch("DELETE FROM tbl1");
st.addBatch("DELETE FROM tbl2");
st.addBatch("DELETE FROM tbl3");
int[] results = st.executeBatch();

然后结果将包含一个数组,其中包含从每个表中删除的行数。

对于插入:

下面是一个示例,向您展示如何通过 JDBCPreparedStatement 在批处理过程中插入少量记录。

dbConnection.setAutoCommit(false);//commit trasaction manually

String insertTableSQL = "INSERT INTO DBUSER"
            + "(USER_ID, USERNAME, CREATED_BY, CREATED_DATE) VALUES"
            + "(?,?,?,?)";              
PreparedStatement = dbConnection.prepareStatement(insertTableSQL);

preparedStatement.setInt(1, 101);
preparedStatement.setString(2, "mkyong101");
preparedStatement.setString(3, "system");
preparedStatement.setTimestamp(4, getCurrentTimeStamp());
preparedStatement.addBatch();

preparedStatement.setInt(1, 102);
preparedStatement.setString(2, "mkyong102");
preparedStatement.setString(3, "system");
preparedStatement.setTimestamp(4, getCurrentTimeStamp());
preparedStatement.addBatch();
preparedStatement.executeBatch();

dbConnection.commit();

资源链接:

JDBCPreparedStatement示例——批量更新 http://www.mkyong.com/jdbc/jdbc-preparedstatement-example-batch-update/

UPDATE:

示例/完整程序 JDBC-批量PreparedStatement-执行DELETE java中使用PreparedStatement的executeUpdate方法进行查询

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

/** Copyright (c), AnkitMittal JavaMadeSoEasy.com */
public class PreparedStatementDeleteExample {
    public static void main(String... arg) {
           Connection con = null;
           PreparedStatement prepStmt = null;
           try {
                  // registering Oracle driver class
                  Class.forName("oracle.jdbc.driver.OracleDriver");

                  // getting connection
                  con = DriverManager.getConnection(
                               "jdbc:oracle:thin:@localhost:1521:orcl",
                               "ankit", "Oracle123");
                  System.out.println("Connection established successfully!");             

                  con.setAutoCommit(false); //Now, transactions won't be committed automatically.

                  prepStmt = con.prepareStatement("DELETE from EMPLOYEE where ID=? ");

                  //1) add set of parameters in PreparedStatement's object - BATCH of commands
                  prepStmt.setInt(1, 7); //substitute first occurrence of ? with 7
                  prepStmt.addBatch();

                  //2) add set of parameters in PreparedStatement's object - BATCH of commands                  
                  prepStmt.setInt(1, 8); //substitute first occurrence of ? with 8
                  prepStmt.addBatch();


                  //Execute PreparedStatement batch
                  prepStmt.executeBatch();
                  System.out.println("PreparedStatement Batch executed, DELETE done");

                  con.commit(); //commit all the transactions

           } catch (ClassNotFoundException e) {
                  e.printStackTrace();
           } catch (SQLException e) {
                  e.printStackTrace();
           }
           finally{
                  try {
                        if(prepStmt!=null) prepStmt.close(); //close PreparedStatement
                        if(con!=null) con.close(); // close connection
                  } catch (SQLException e) {
                        e.printStackTrace();
                  }
           }
    }
}

OUTPUT:

Connection established successfully!
PreparedStatement Batch executed, DELETE done

在本教程中,我们学习了如何使用PreparedStatement执行DELETE查询(DML命令)addBatch() and executeBatch()java JDBC 中的方法。

资源链接:

  1. JDBC批处理(批量插入、更新和删除) http://www.technowlogeek.com/programming/java/jdbc/jdbc-batch-processing-batch-insert-update-and-delete/
  2. JDBC-批量PreparedStatement示例-执行DELETE查询(DML 命令)使用PreparedStatement的addBatch()和executeBatch() java中的方法 http://www.javamadesoeasy.com/2015/07/jdbc-batch-preparedstatement-example_22.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 JDBC 批量删除和插入 的相关文章

随机推荐

  • 如何根据日历将 JSON 数据分组到杂草中?

    我正在做一些 d3JS 编程来生成带有 JSON 数据的图形 test date 1 5 2014 allocated 14 14 unallocated 7 14 date 1 6 2014 allocated 10 38 unalloc
  • 使用 Cordova 3.7 从 iOS 8 上的 www 文件夹加载资源 (file://)

    我有一个混合应用程序 可以使用 Cordova 3 7 和 jQuery Mobile 1 3 2 在 iOS 7 上完美运行 我正在 iOS 8 上测试它 但它坏了 我使用绝对路径请求应用程序的每个页面 视图 使用file 协议 例如 f
  • 如何在 Windows 上模拟 iPad 浏览器

    如何在windows下模拟iPad浏览器 我知道用户代理字符串 并且我知道浏览器宽度 高度 屏幕宽度 高度 我相信 如果您模拟 iPad 的用户代理并适当设置窗口大小 您就可以使用 Safari Windows 从 apple com 下载
  • 如何在 UML 属性中指定枚举文字作为默认值?

    我目前使用 EMF UML Implementation 进行一些模型转换 在我的模型转换中 我创建了一个具有一些属性的 uml 类 这些属性是我也创建的枚举类型 某些属性应该获得默认值 默认值应该是枚举文字 现在的问题是 如何将枚举文字获
  • 如何在 jQuery 中将值从一个页面传递到另一个页面

    我有两个 jQuery 页面 Page1 和 Page2 并且我能够在 Page1 中获取输入 The somval 1000 第 1 页用户输入某个值 我已经存储了该值 var val somval 现在在第二页中 我需要获取第1页中so
  • 使用 keycloak 进行 Spring Boot 测试

    我正在尝试运行简单的单元测试 Keycloak 以正确的方式配置 我测试了它 我的 mvc 应用程序正在连接并且用户已通过身份验证 但现在我尝试测试我的控制器 即使 我使用 spring slices keycloak 适配器被调用并给我错
  • .htaccess 当某些文件不存在时重定向到 404 页面

    我使用自己的 MVC 系统已经有一段时间了 它运行得很好 我在我的 htaccess 中使用它 RewriteEngine On RewriteCond REQUEST FILENAME d RewriteCond REQUEST FILE
  • 在 unix 中操作字符串来创建目录

    我想将一个单词作为输入 并在 unix shell 中使用该单词的字母创建连续的目录 我尝试了 sed awk 和 Fold 命令 但没有获得任何有用的结果 有什么建议吗 例如 如果输入是hello 它应该创建h e l l o目录就像一个
  • 防止 tomcat 在部署时启动应用程序

    有什么方法可以告诉Tomcat不要自动启动我想要部署的应用程序吗 我想手动执行此操作 In CATALINA HOME conf server xml
  • 使用插值时添加换行符

    我有一些用于警报消息框的 html 使用插值 我可以重复使用相同的 html 来显示多个不同的警报消息 它看起来像这样 p myAlertMessage p 现在我想显示一条包含换行符的较长警报消息 但是 我似乎无法以任何会引入换行符的方式
  • 有没有一种简单的方法可以从 Kotlin 中的对象列表中获取数组?

    我希望能得到一个name列表中的数组MSetting 目前我用代码A来做 但是太复杂了 有没有简单的方法呢 Code A fun getName aList List
  • 如何安全地回显文字字符串“%I”?

    我怎样才能回显字符串 I以安全的方式 独立于是否echo命令行被放置在for I loop 例如 在命令提示符中 cmd gt gt gt rem echo is outside of for scope so this works gt
  • 为什么将模型上传到 HuggingFace 存储库的速度如此之慢?

    我有一个问题 我正在尝试将模型推送到 HuggingFace 存储库 问题是它说上传过去 16 小时 而这只是 pytorch model bin 文件 大约 850MB 我用的是LFS 我尝试手动将文件添加到存储库 这需要很长时间 我不愿
  • 在终端中根据括号或圆括号(仅限顶级)分割文本文件

    我有几个文本文件 utf 8 我想在 shell 脚本中处理它们 它们的格式并不完全相同 但如果我只能将它们分解成可食用的块 我就可以处理它 这可以用 C 或 python 编程 但我不喜欢 编辑 我用 C 编写了一个解决方案 看我自己的答
  • getCanonicalName 时抛出 ClassCircularityError

    异常堆栈 Exception in thread main java lang ClassCircularityError plugins agents Agent at java lang Class getDeclaringClass
  • 自定义工具快捷方式 Visual Studio

    有没有办法在 Visual Studio 中创建自定义工具的快捷方式 目前 我必须导航到解决方案中的工具 右键单击并运行自定义工具 如果我可以绑定快捷键或从工具栏运行该工具 那就太好了 有谁知道有什么方法可以做到这一点 我想你正在寻找这个
  • 错误消息是 (#12) bio 字段在 v2.8 及更高版本中已弃用

    我使用了 spring social facebook 的 2 0 3 RELEASE 版本和 Facebook 应用程序 api v2 8 我调用 Facebook 登录但返回了此消息 12 bio 字段在 v2 8 及更高版本中已弃用
  • Symfony / PHP - 存储单个值的最佳方式

    假设我有一个在 Symfony 3 2 Doctrine 上运行的应用程序 问题 存储会随着某些操作而改变的单个值的最佳方法是什么 第一个想法 我认为创建一个具有单个属性的实体将创建一个具有单个列的表 该列将具有单个值 更改某些操作 这不是
  • 用于拒绝请求的 NetflixOSS Zuul 过滤器

    我正在尝试在简单的 spring cloud Netflix Api 网关 反向代理 中使用 ZuulFilter 以便对自定义身份验证提供程序进行请求身份验证 通过 Rest 调用 过滤器应使用 401 拒绝未经授权的请求 并且不要将这些
  • 使用 JDBC 批量删除和插入

    我想知道是否可以使用批处理来执行参数化 DELETE 和 INSERT 语句 我知道如何插入多行 但是 我首先想做一个 DELETE 语句 这需要不同的参数 以下是我插入多个语句的方法 String query INSERT INTO TA