/*
*应用在需要一次插入多行,表示两个对象的关联
*/
//修改或删除
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());
}
}
分享到:
相关推荐
在实际应用中,"batchinsert"可能是一个包含示例代码的文件,展示了如何使用JDBC批量插入Blob字段的具体实现。通过研究和理解这些代码,你可以更好地掌握批量插入Blob数据的技巧,并根据自己的需求进行调整和优化。 ...
### JDBC批量操作详解:效率与性能的提升策略 在数据库操作中,批量处理是一种常见的优化技术,用于提高数据处理的效率和性能。JDBC(Java Database Connectivity)作为Java应用程序与数据库交互的标准API,提供了...
批量处理主要通过`addBatch()`方法添加SQL语句到批处理队列,然后通过`executeBatch()`方法一次性执行所有已添加的SQL。 以下是一个简单的批量插入示例: ```java Connection conn = DriverManager.getConnection...
本篇文章将深入探讨三种不同的JDBC批量插入编程方法,并进行对比分析,以帮助开发者更好地理解和选择适合的批量处理方式。 1. **使用PreparedStatement的addBatch()和executeBatch()** JDBC提供了...
在这个“springBoot+springBatch批量处理数据demo”中,我们将探讨如何将这两个强大的工具结合在一起,实现高效的数据处理。 首先,SpringBoot的核心特性在于其自动配置,它通过`@SpringBootApplication`注解自动...
本主题将详细讲解如何使用Spring JDBC Template访问MySQL数据库并进行批量插入数据的操作。 首先,我们需要在项目中引入Spring框架的相关依赖,通常包括`spring-context`和`spring-jdbc`。这些可以在Maven或Gradle...
通过 `Statement` 对象的 `addBatch(String sql)` 方法添加SQL语句到批处理队列,然后通过 `executeBatch()` 执行所有累积的SQL。 - 批处理适用于多条相同类型的操作,如批量插入或更新。 5. **预编译语句...
此外,JDBC驱动还支持预编译的SQL语句(PreparedStatement),批量操作(Batch Updates),以及更高级的功能如存储过程调用,事务控制等。 在开发过程中,确保使用与你的Java环境和SQL Server版本兼容的驱动版本,...
- 使用批处理(Batch Processing)可以批量提交SQL语句,减少网络往返次数。 - 合理设置连接池,避免频繁创建和关闭连接。 - 使用数据库的连接复用技术,如Oracle的Physical Pools或C3P0连接池。 6. **注意事项*...
针对MySQL数据库,Spring-Batch提供了一套完整的JDBC支持,允许开发者配置SQL查询来读取和更新数据。在描述中提到,项目已经移除了两个特定数据库的驱动库,这意味着默认配置是针对MySQL的。如果你需要支持Oracle或...
4. 考虑使用批处理(Batch Processing)来提高批量插入或更新的效率。 此外,为了优化性能,可以考虑使用GAEA提供的缓存服务,将频繁查询的数据存储在内存中,减少对数据库的直接访问。同时,合理设置数据库连接池...
本篇将围绕“jdbc示例代码”这一主题,深入探讨相关的知识点,包括batch处理、滚动游标、事务管理和DML操作,以及PreparedStatement的使用。 1. **Batch处理**: 在批量处理中,我们可以通过JDBC API一次性提交多...
- 使用批量插入:通过调整`batch_size`参数,一次性插入多条记录,提高写入效率。 - 调整数据库索引:根据写入的数据模式,创建合适的索引,提升查询性能。 - 配置连接池:通过`jdbc_connection_pool`参数启用连接池...
1. **Batch Updates**:PreparedStatement的addBatch()方法用于添加多条SQL,executeBatch()执行整个批次,提高批量操作的效率。 ### 其他高级特性 1. **JDBC批注(JDBC Annotation)**:在Java 7中引入,允许在...
- 支持Statement的batchUpdate方法,用于批量执行SQL语句,提高性能。 - 具备更好的异常处理机制,通过SQLException的getSQLState方法获取更具体的错误信息。 - 支持CallableStatement的registerOutParameter方法...
批量操作(Batch Updates)也可以显著提升效率。 9. **连接池管理**:在实际应用中,为了提高性能和减少资源消耗,通常使用连接池(如C3P0, HikariCP)来管理数据库连接,避免频繁地创建和关闭连接。 通过理解并...
8. **集成性**:作为Spring框架的一部分,Spring Batch 可以无缝集成其他Spring组件,如Spring JDBC、Spring Integration等,也支持与其他企业服务如JMS、ESB的集成。 9. **元数据表**:Spring Batch 使用一组预...
在JPA中,可以使用`@Transactional`注解控制事务边界,并通过设置`hibernate.jdbc.batch_size`配置批处理大小。 总结,通过Spring Boot和JPA,我们可以方便地进行数据库操作,包括批量存储。通过合理配置连接池如...