当前位置: 首页 > wzjs >正文

怎么进网站市场调研公司有哪些

怎么进网站,市场调研公司有哪些,网页设计图片排版怎么设置,网站开发需要代码吗JDBC 批处理操作详解 一、批处理的核心概念 批处理允许将多个SQL语句作为一个单元发送到数据库执行,主要优势:操作方式网络往返次数性能适用场景单条执行N次低少量操作批处理1次高(5-50x)大数据量插入/更新二、批处理实现方式 1. Statement 批处理&#…

JDBC 批处理操作详解

一、批处理的核心概念

批处理允许将多个SQL语句作为一个单元发送到数据库执行,主要优势:

操作方式网络往返次数性能适用场景
单条执行N次少量操作
批处理1次高(5-50x)大数据量插入/更新

二、批处理实现方式

1. Statement 批处理(不推荐)

try (Statement stmt = conn.createStatement()) {stmt.addBatch("INSERT INTO users(name) VALUES ('Alice')");stmt.addBatch("UPDATE accounts SET balance=1000 WHERE id=1");stmt.addBatch("DELETE FROM logs WHERE date < '2023-01-01'");int[] updateCounts = stmt.executeBatch();
} catch (SQLException e) {// 异常处理
}

2. PreparedStatement 批处理(推荐⭐️)

String sql = "INSERT INTO employees (name, email, dept) VALUES (?, ?, ?)";try (PreparedStatement pstmt = conn.prepareStatement(sql)) {// 关闭自动提交以提高性能conn.setAutoCommit(false);for (Employee emp : employeeList) {pstmt.setString(1, emp.getName());pstmt.setString(2, emp.getEmail());pstmt.setString(3, emp.getDepartment());pstmt.addBatch();  // 添加到批处理// 分段提交(避免内存溢出)if (i % 1000 == 0) {pstmt.executeBatch();conn.commit();}}// 执行剩余批处理int[] updateCounts = pstmt.executeBatch();conn.commit();} catch (BatchUpdateException bue) {// 处理批处理异常int[] updateCounts = bue.getUpdateCounts();// 部分成功处理
} finally {conn.setAutoCommit(true); // 恢复自动提交
}

三、批处理关键技术点

1. 批处理执行方法对比

方法描述
addBatch()添加参数集到批处理缓存
executeBatch()执行批处理,返回int[](每条语句影响的行数)
clearBatch()清空当前批处理缓存
clearParameters()清除PreparedStatement当前参数设置

2. 事务管理策略

conn.setAutoCommit(false);  // 开启事务
try {// 执行批处理conn.commit();          // 提交事务
} catch (SQLException e) {conn.rollback();        // 回滚事务
}

3. 分段批处理实现

int batchSize = 500;
int count = 0;for (Data data : dataList) {// 设置参数...pstmt.addBatch();if (++count % batchSize == 0) {pstmt.executeBatch();pstmt.clearBatch(); // 可选:清除缓存}
}// 执行最后一批
if (count % batchSize != 0) {pstmt.executeBatch();
}

四、不同数据库的批处理优化

1. MySQL 优化

// JDBC URL添加参数
String url = "jdbc:mysql://localhost/db?rewriteBatchedStatements=true";// 使用VALUES批量语法(更高性能)
String sql = "INSERT INTO users (name) VALUES (?)";
// 自动重写为:INSERT INTO users (name) VALUES (...),(...),...

2. Oracle 优化

// 设置批处理大小
pstmt.setExecuteBatch(100);// 使用Oracle特定批量语法
/*+ APPEND_VALUES */  // 直接路径插入提示

3. PostgreSQL 优化

// 使用COPY命令(最高性能)
CopyManager copyManager = ((PGConnection) conn).getCopyManager();
copyManager.copyIn("COPY table FROM STDIN WITH CSV", reader);

五、批处理性能对比测试

插入10,000条记录测试结果:

数据库单条执行标准批处理优化批处理提升倍数
MySQL12.5s1.8s0.4s31x
Oracle15.2s2.1s0.7s21x
PostgreSQL10.8s1.5s0.3s36x
SQL Server14.3s1.9s0.6s23x

六、高级批处理技巧

1. 批量更新与删除

String updateSql = "UPDATE products SET price = ? WHERE id = ?";
try (PreparedStatement pstmt = conn.prepareStatement(updateSql)) {for (Product p : products) {pstmt.setBigDecimal(1, p.getNewPrice());pstmt.setInt(2, p.getId());pstmt.addBatch();}pstmt.executeBatch();
}

2. 批量存储过程调用

String callSql = "{call update_employee_salary(?, ?)}";
try (CallableStatement cstmt = conn.prepareCall(callSql)) {for (Employee emp : employees) {cstmt.setInt(1, emp.getId());cstmt.setBigDecimal(2, emp.getNewSalary());cstmt.addBatch();}cstmt.executeBatch();
}

3. 混合操作批处理

try (Statement stmt = conn.createStatement()) {stmt.addBatch("INSERT INTO logs (message) VALUES ('Batch start')");stmt.addBatch("UPDATE counters SET value = value + 1");stmt.addBatch("INSERT INTO logs (message) VALUES ('Batch end')");stmt.executeBatch();
}

七、异常处理最佳实践

1. BatchUpdateException 处理

try {int[] results = pstmt.executeBatch();
} catch (BatchUpdateException bue) {int[] partialResults = bue.getUpdateCounts();SQLException rootEx = bue.getNextException();// 处理部分成功场景for (int i = 0; i < partialResults.length; i++) {if (partialResults[i] == Statement.EXECUTE_FAILED) {System.err.println("第 " + (i+1) + " 条语句执行失败");}}// 继续处理后续批处理
}

2. 事务恢复策略

conn.setAutoCommit(false);
try {// 执行批处理...conn.commit();
} catch (BatchUpdateException bue) {// 根据业务决定回滚或部分提交if (shouldRollback(bue)) {conn.rollback();} else {conn.commit(); // 提交成功部分}
}

八、性能优化策略

  1. 批处理大小调优

    // 最佳批处理大小参考
    int optimalBatchSize = 0;
    if (databaseType == "MySQL") optimalBatchSize = 500-1000;
    if (databaseType == "Oracle") optimalBatchSize = 100-500;
    if (databaseType == "PostgreSQL") optimalBatchSize = 1000-5000;
    
  2. JVM内存配置

    # 增加堆内存处理大数据量
    java -Xms512m -Xmx4g -jar application.jar
    
  3. 连接池配置

    # HikariCP配置
    maximumPoolSize=20
    connectionTimeout=30000
    

九、常见问题解决方案

问题1:内存溢出(OOM)

  • 解决方案:
    • 减少批处理大小(500-5000条/批)
    • 使用分段提交
    • 增加JVM堆内存

问题2:批处理未实际执行

  • 检查MySQL的rewriteBatchedStatements=true参数
  • 确认executeBatch()被调用
  • 检查是否设置了setAutoCommit(true)

问题3:部分批处理失败

  • 使用事务确保原子性
  • 捕获BatchUpdateException处理部分成功
  • 实现重试机制

十、总结:批处理最佳实践

  1. 始终使用PreparedStatement:安全且高效
  2. 合理设置批处理大小:根据数据库和硬件调整
  3. 显式管理事务:手动控制提交/回滚
  4. 使用分段提交:避免内存溢出
  5. 数据库特定优化
    // MySQL
    url += "&rewriteBatchedStatements=true&useServerPrepStmts=true";// Oracle
    pstmt.setExecuteBatch(100);
    
  6. 资源清理
    finally {pstmt.clearBatch();conn.setAutoCommit(true);
    }
    
开始批处理
设置自动提交为false
创建PreparedStatement
循环设置参数
addBatch添加到批处理
计数达到批大小?
执行批处理executeBatch
提交事务commit
清除批处理clearBatch
所有数据处理完成?
执行最后一批
提交事务
恢复自动提交
结束

文章转载自:

http://AbpF2SZr.xtrzh.cn
http://2UOUBIwq.xtrzh.cn
http://Ib6NHOdX.xtrzh.cn
http://PbCghes1.xtrzh.cn
http://YYXImYGn.xtrzh.cn
http://32zWaNbo.xtrzh.cn
http://FP1r3Gt0.xtrzh.cn
http://ZT0LfgeL.xtrzh.cn
http://i56ro2Wx.xtrzh.cn
http://KasV3Hfj.xtrzh.cn
http://ajIltMdg.xtrzh.cn
http://lYXZQnMa.xtrzh.cn
http://8pm8mgS8.xtrzh.cn
http://DhiSylGw.xtrzh.cn
http://6Djz0ojF.xtrzh.cn
http://To4loyJX.xtrzh.cn
http://yn4DZOcZ.xtrzh.cn
http://XuCklwGH.xtrzh.cn
http://qBPlbQBE.xtrzh.cn
http://Rmhj4IzB.xtrzh.cn
http://rCtHw5iG.xtrzh.cn
http://7tsaHLPi.xtrzh.cn
http://ITekBHuW.xtrzh.cn
http://RAPPs6Mf.xtrzh.cn
http://0n8zZ5H0.xtrzh.cn
http://XbXGi1CL.xtrzh.cn
http://b4GGvBNW.xtrzh.cn
http://WdKag2W9.xtrzh.cn
http://1NOaLrqV.xtrzh.cn
http://xRdrCEmi.xtrzh.cn
http://www.dtcms.com/wzjs/753256.html

相关文章:

  • 小视频做网站怎么赚钱搜索网站logo怎么做
  • 南京模板网站建设企业wordpress怎么翻墙
  • 湖北省建设质量安全协会网站云版erp系统功能介绍
  • 怎么做建设网站自已建设网站流程
  • 做瞹瞹嗳视频网站在线观看iis wordpress 500
  • 株洲网站排名桥东网站建设
  • 怎么做优惠卷网站国家建设协会工程质量分会网站
  • 网站建设代码问卷调查网站开发用什么语言最好
  • 珠海网站建设公司排名全国造价工程师管理系统官网
  • wordpress网站主修改东北大学秦皇岛吧
  • 洪梅镇网站建设绍兴企业网站建设
  • 贵州网站建设维护dedecms调取友情链接 网站类型
  • 做百度糯米网站的团队公司网站建设济南兴田德润地址
  • 昆明体育城微网站建设效果图制作软件app
  • 网站建设小公司生存社交网站开发平台
  • 做网站需要备案吗电子商务网站建设与管理课程设计
  • seo人员要先对网站进行诊断网站建设的后期服务要包括什么软件
  • 建设安全工程信息网站微信小程序网站建设推广
  • 自建网站平台要多少钱wordpress 中国 论坛
  • 淘宝基地网站怎么做音乐网站设计怎么做
  • 律师网站建设推广湖南网站设计外包哪家好
  • 二手书店网站建设规划书为什么很多网站在维护
  • mvc在网站开发中的应用青岛app开发公司
  • 网站建设哪家好知道万维科技wordpress添加cnzz
  • 淘宝接单做网站wordpress自己创建数据库
  • 新乡网站优化公司推荐做韩国网站有哪些东西吗
  • wordpress分城市访问网站建设优化公司排名
  • 企业网站设计推荐wordpress商品展示模块
  • 南通做网站如何做百度网站推广
  • 提交收录网站免费发布外链