`

jdbc 批量添加 batch

    博客分类:
  • sql
阅读更多

/*

*应用在需要一次插入多行,表示两个对象的关联

*/

//修改或删除

public void saveRoleConfig(final Role role , final List<Integer> fdIds){
  if(fdIds==null){
   String sql_;
   if(role.getOid()>0){
    sql_="update C_SYS_ROLE set ROLE_NAME='"+role.getName()+
     "',ROLE_DESC='"+role.getDesc()+"',ROLE_TYPE="+role.getType()+",STATUS="+role.getStatus()+" where Oid="+role.getOid();
   }
   else {
    sql_="insert into C_SYS_ROLE r (r.Oid,r.ROLE_NAME,r.ROLE_DESC,r.ROLE_TYPE,r.STATUS)" +
    " values (func_sequence.nextval,'"+role.getName()+"','"+role.getDesc()+"',"+role.getType()+","+role.getStatus()+")";
   }
   this.execute(sql_);
   return;
  }
  StringBuffer sb = new StringBuffer();
  if(role.getOid()>0){
   sb.append("update C_SYS_ROLE r");
   sb.append(" set r.ROLE_NAME=?,r.ROLE_DESC=?,");
   sb.append(" r.ROLE_TYPE=?,");
   sb.append(" r.STATUS=?");
   sb.append(" where r.OID="+role.getOid());
  }
  else{
   sb.append("insert into C_SYS_ROLE r");
   sb.append("(r.Oid,");
   sb.append(" r.ROLE_NAME,r.ROLE_DESC,");
   sb.append(" r.ROLE_TYPE,");
   sb.append(" r.STATUS)");
   sb.append(" values (");
   sb.append("func_sequence.nextval,");
   sb.append("?,?,?,?)");
  }
  final String sqll = sb.toString();
  //this.update(sqll, new Object[]{role.getName(),role.getDesc(),role.getType(),role.getStatus()});
  
  if(role.getOid()>0){
   getJdbcTemplate().update(new PreparedStatementCreator() {
    public PreparedStatement createPreparedStatement(Connection conn)
      throws SQLException {
     int i = 0;
 
     java.sql.PreparedStatement ps = conn.prepareStatement(sqll,new String[] {"oid"});
     ps.setString(++i, role.getName());
     ps.setString(++i, role.getDesc());
     ps.setInt(++i, role.getType());
     ps.setInt(++i, role.getStatus()); 
     return ps;
    }
   });
   String sql = "insert into C_SYS_ROLE_FUNC_MAP(ROLE_OID,FUNC_OID) values(?,?)";
   this.batchUpdate(sql, new FuncBatchPreparedStatementSetter(role.getOid(), fdIds)); 
  }
  else{
   KeyHolder keyHolder = new GeneratedKeyHolder();
   getJdbcTemplate().update(new PreparedStatementCreator() {
    public PreparedStatement createPreparedStatement(Connection conn)
      throws SQLException {
     int i = 0;
 
     java.sql.PreparedStatement ps = conn.prepareStatement(sqll,new String[] {"oid"});
     ps.setString(++i, role.getName());
     ps.setString(++i, role.getDesc());
     ps.setInt(++i, role.getType());
     ps.setInt(++i, role.getStatus());
     return ps;
    }
   }, keyHolder);
 
   String sql = "insert into C_SYS_ROLE_FUNC_MAP(ROLE_OID,FUNC_OID) values(?,?)";
   this.batchUpdate(sql, new FuncBatchPreparedStatementSetter(keyHolder.getKey().longValue(), fdIds)); 
  }
  
 }

 

//批量添加

private class FuncBatchPreparedStatementSetter implements
   BatchPreparedStatementSetter {
  final List<Integer> temList;
  final long wSetId;

  
  public FuncBatchPreparedStatementSetter(long roleId,
    List<Integer> list) {
   temList = list;
   wSetId = roleId;
  }

  public int getBatchSize() {
   return temList.size();
  }

  public void setValues(PreparedStatement ps, int i) throws SQLException {
   ps.setLong(1, wSetId);
   ps.setLong(2, temList.get(i).longValue());
  }
 }

分享到:
评论

相关推荐

    jdbc批量插入大字段

    在实际应用中,"batchinsert"可能是一个包含示例代码的文件,展示了如何使用JDBC批量插入Blob字段的具体实现。通过研究和理解这些代码,你可以更好地掌握批量插入Blob数据的技巧,并根据自己的需求进行调整和优化。 ...

    jdbc批量 (绝对经典)

    ### JDBC批量操作详解:效率与性能的提升策略 在数据库操作中,批量处理是一种常见的优化技术,用于提高数据处理的效率和性能。JDBC(Java Database Connectivity)作为Java应用程序与数据库交互的标准API,提供了...

    jdbc-批量插入数据

    批量处理主要通过`addBatch()`方法添加SQL语句到批处理队列,然后通过`executeBatch()`方法一次性执行所有已添加的SQL。 以下是一个简单的批量插入示例: ```java Connection conn = DriverManager.getConnection...

    三种JDBC批量插入编程方法的比较

    本篇文章将深入探讨三种不同的JDBC批量插入编程方法,并进行对比分析,以帮助开发者更好地理解和选择适合的批量处理方式。 1. **使用PreparedStatement的addBatch()和executeBatch()** JDBC提供了...

    springBoot+springBatch批量处理数据demo

    在这个“springBoot+springBatch批量处理数据demo”中,我们将探讨如何将这两个强大的工具结合在一起,实现高效的数据处理。 首先,SpringBoot的核心特性在于其自动配置,它通过`@SpringBootApplication`注解自动...

    spring jdbc Templatetest 访问mysql数据库,批量插入数据

    本主题将详细讲解如何使用Spring JDBC Template访问MySQL数据库并进行批量插入数据的操作。 首先,我们需要在项目中引入Spring框架的相关依赖,通常包括`spring-context`和`spring-jdbc`。这些可以在Maven或Gradle...

    JDBCJDBC高级应用

    通过 `Statement` 对象的 `addBatch(String sql)` 方法添加SQL语句到批处理队列,然后通过 `executeBatch()` 执行所有累积的SQL。 - 批处理适用于多条相同类型的操作,如批量插入或更新。 5. **预编译语句...

    sqljdbc.zip

    此外,JDBC驱动还支持预编译的SQL语句(PreparedStatement),批量操作(Batch Updates),以及更高级的功能如存储过程调用,事务控制等。 在开发过程中,确保使用与你的Java环境和SQL Server版本兼容的驱动版本,...

    JDBC驱动及JAR包

    - 使用批处理(Batch Processing)可以批量提交SQL语句,减少网络往返次数。 - 合理设置连接池,避免频繁创建和关闭连接。 - 使用数据库的连接复用技术,如Oracle的Physical Pools或C3P0连接池。 6. **注意事项*...

    spring-batch同步数据库mysql源码

    针对MySQL数据库,Spring-Batch提供了一套完整的JDBC支持,允许开发者配置SQL查询来读取和更新数据。在描述中提到,项目已经移除了两个特定数据库的驱动库,这意味着默认配置是针对MySQL的。如果你需要支持Oracle或...

    gaea 和JDBC z整合

    4. 考虑使用批处理(Batch Processing)来提高批量插入或更新的效率。 此外,为了优化性能,可以考虑使用GAEA提供的缓存服务,将频繁查询的数据存储在内存中,减少对数据库的直接访问。同时,合理设置数据库连接池...

    jdbc示例代码

    本篇将围绕“jdbc示例代码”这一主题,深入探讨相关的知识点,包括batch处理、滚动游标、事务管理和DML操作,以及PreparedStatement的使用。 1. **Batch处理**: 在批量处理中,我们可以通过JDBC API一次性提交多...

    logstash-output-jdbc.zip

    - 使用批量插入:通过调整`batch_size`参数,一次性插入多条记录,提高写入效率。 - 调整数据库索引:根据写入的数据模式,创建合适的索引,提升查询性能。 - 配置连接池:通过`jdbc_connection_pool`参数启用连接池...

    jdbc api数据库编程实作教材

    1. **Batch Updates**:PreparedStatement的addBatch()方法用于添加多条SQL,executeBatch()执行整个批次,提高批量操作的效率。 ### 其他高级特性 1. **JDBC批注(JDBC Annotation)**:在Java 7中引入,允许在...

    Java连接sqlserver 的jdbc驱动,3.0和4.0

    - 支持Statement的batchUpdate方法,用于批量执行SQL语句,提高性能。 - 具备更好的异常处理机制,通过SQLException的getSQLState方法获取更具体的错误信息。 - 支持CallableStatement的registerOutParameter方法...

    JDBC 数据库链接数 据库链接操作实例

    批量操作(Batch Updates)也可以显著提升效率。 9. **连接池管理**:在实际应用中,为了提高性能和减少资源消耗,通常使用连接池(如C3P0, HikariCP)来管理数据库连接,避免频繁地创建和关闭连接。 通过理解并...

    Spring batch 2.1.jar

    8. **集成性**:作为Spring框架的一部分,Spring Batch 可以无缝集成其他Spring组件,如Spring JDBC、Spring Integration等,也支持与其他企业服务如JMS、ESB的集成。 9. **元数据表**:Spring Batch 使用一组预...

    springboot + jpa 批量存储示例

    在JPA中,可以使用`@Transactional`注解控制事务边界,并通过设置`hibernate.jdbc.batch_size`配置批处理大小。 总结,通过Spring Boot和JPA,我们可以方便地进行数据库操作,包括批量存储。通过合理配置连接池如...

Global site tag (gtag.js) - Google Analytics