java批量更新

public void updateDoublePoints(final String[] games,final String[] servers,final Integer statu) {
 String sql ="UPDATE dim.dim_game_server SET is_double_points_game_server=? WHERE game=? AND game_server = ?";

 super.getJdbcTemplate().batchUpdate(sql, new BatchPreparedStatementSetter(){
 
   public int getBatchSize(){
   return games.length;
  }
  @Override
  public void setValues(java.sql.PreparedStatement ps, int i)
    throws SQLException {
   ps.setInt(1, statu);
   ps.setString(2, games[i]);
   ps.setString(3, servers[i]);
  }
 });
}

 

 

 @Override
 public void deleteTableCategory(List<TableCategory> tableCategoryList){
  String sql="DELETE FROM metadata.table_category WHERE db_name=:dbName AND table_category=:tableCategory AND table_name=:tableName";
  SqlParameterSource[] params = SqlParameterSourceUtils.createBatch(tableCategoryList.toArray());
  tableCategoryJdbcTemplate.batchUpdate(sql, params);
 }

Java 中实现批量更新的通用方法可以借助 JDBC 来完成。以下是一个通用的示例代码,涵盖了不同的实现方式: ### 方式一:使用 `Statement` 的 `addBatch` 方法 ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; public class BatchUpdateWithStatement { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/your_database"; String user = "your_username"; String password = "your_password"; try (Connection connection = DriverManager.getConnection(url, user, password); Statement statement = connection.createStatement()) { // 禁用自动提交,开启事务 connection.setAutoCommit(false); // 添加批量更新语句 for (int i = 0; i < 10; i++) { String sql = "update your_table set column1 = 'value" + i + "' where id = " + i; statement.addBatch(sql); } // 执行批量更新 int[] results = statement.executeBatch(); // 提交事务 connection.commit(); // 处理结果 for (int result : results) { System.out.println("更新结果: " + result); } } catch (Exception e) { e.printStackTrace(); } } } ``` ### 方式二:使用 `PreparedStatement` 的 `addBatch` 方法 ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; public class BatchUpdateWithPreparedStatement { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/your_database"; String user = "your_username"; String password = "your_password"; try (Connection connection = DriverManager.getConnection(url, user, password); PreparedStatement preparedStatement = connection.prepareStatement("update your_table set column1 = ? where id = ?")) { // 禁用自动提交,开启事务 connection.setAutoCommit(false); // 添加批量更新参数 for (int i = 0; i < 10; i++) { preparedStatement.setString(1, "value" + i); preparedStatement.setInt(2, i); preparedStatement.addBatch(); } // 执行批量更新 int[] results = preparedStatement.executeBatch(); // 提交事务 connection.commit(); // 处理结果 for (int result : results) { System.out.println("更新结果: " + result); } } catch (Exception e) { e.printStackTrace(); } } } ``` ### 方式三:使用 MyBatis 进行批量更新 在 MyBatis 中可以通过编写 XML 映射文件来实现批量更新,示例如下: ```xml <update id="batchUpdate" parameterType="java.util.List"> <foreach collection="list" item="item" index="index" open="" close="" separator=";"> update your_table <set> <if test="item.column1 != null"> column1 = #{item.column1}, </if> <if test="item.column2 != null"> column2 = #{item.column2}, </if> </set> where id = #{item.id} </foreach> </update> ``` 对应的 Java 代码调用: ```java import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.InputStream; import java.util.ArrayList; import java.util.List; public class BatchUpdateWithMyBatis { public static void main(String[] args) { // 加载 MyBatis 配置文件 String resource = "mybatis-config.xml"; InputStream inputStream = BatchUpdateWithMyBatis.class.getClassLoader().getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); try (SqlSession session = sqlSessionFactory.openSession()) { // 创建批量更新的数据列表 List<YourEntity> list = new ArrayList<>(); for (int i = 0; i < 10; i++) { YourEntity entity = new YourEntity(); entity.setId(i); entity.setColumn1("value" + i); entity.setColumn2("value" + (i + 1)); list.add(entity); } // 执行批量更新 session.update("YourMapper.batchUpdate", list); // 提交事务 session.commit(); } catch (Exception e) { e.printStackTrace(); } } } class YourEntity { private int id; private String column1; private String column2; // Getters and Setters public int getId() { return id; } public void setId(int id) { this.id = id; } public String getColumn1() { return column1; } public void setColumn1(String column1) { this.column1 = column1; } public String getColumn2() { return column2; } public void setColumn2(String column2) { this.column2 = column2; } } ``` ### 解释 - **使用 `Statement` 的 `addBatch` 方法**:直接将 SQL 语句添加到批量操作中,适用于简单的 SQL 语句批量更新。 - **使用 `PreparedStatement` 的 `addBatch` 方法**:通过预编译 SQL 语句,避免 SQL 注入问题,适用于需要动态参数的批量更新。 - **使用 MyBatis 进行批量更新**:通过 XML 映射文件编写批量更新语句,结合 Java 代码调用,适用于基于 MyBatis 框架的项目。 ### 注意事项 - 在进行批量更新时,建议禁用自动提交,开启事务,以提高性能和保证数据的一致性。 - 不同的数据库和 JDBC 驱动可能对批量更新的支持有所不同,需要根据实际情况进行调整。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值