有的时候,我们需要一次性插入很多的数据或者一次性更新、删除很多的数据,那么为了提高效率, 我们不妨使用JDBC的批处理来完成。以下就JDBC的批处理的例子展开讨论。所有应该注意的地方均 有注释。不过需要注意的是我们不能使用批处理来执行查询,即批处理语句中不可以出现select语句。 import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Statement; /* 9:05:15 AM2011 */ public class BatchExecute { private static Connection conn = null; private static PreparedStatement ps = null; private static Statement st=null; public static void main(String[] args) { //noStaticBatch();//非静态批 //staticBatch();//静态批 blendBatch();//混合模式 } public static void blendBatch(){ try{ long start = System.currentTimeMillis(); conn.setAutoCommit(false); st=conn.createStatement(); st.addBatch("insert into person(name,age) values('zhuqi',22)");//插入 st.addBatch("insert into person(name,age) values('zhaoba',21)"); st.addBatch("update person set name = 'qita',age='100' where name = 'zhangsan'");//更新 st.addBatch("delete from person where name like 'name%'");//删除 st.executeBatch(); conn.commit(); System.out.print("总共用时:" + (System.currentTimeMillis() - start) / 1000); }catch(Exception e){ }finally{ closeDB(); } } public static void staticBatch(){ try{ long start = System.currentTimeMillis(); conn.setAutoCommit(false); /**以下是错误的用法,此用法中两条sql语句均为执行, * 如果想应用此方式的批处理,请参照blendBatch方法**/ /*ps=conn.prepareStatement("insert into person(name,age) values('lisi',22)"); ps=conn.prepareStatement("insert into person(name,age) values('wangwu',20)"); ps.addBatch();*/ /**以下是正确的用法**/ String sql="insert into person(name,age) values(?,?)"; ps=conn.prepareStatement(sql); ps.setString(1, "lisi"); ps.setInt(2, 22); ps.addBatch(); ps.setString(1, "wangwu"); ps.setInt(2, 20); ps.addBatch(); ps.addBatch("update person set name = 'zhangsan',age = 23 where name = 'lisi'");//增加静态批 ps.executeBatch(); conn.commit(); System.out.print("总共用时:" + (System.currentTimeMillis() - start) / 1000); }catch(Exception e){ }finally{ closeDB(); } } public static void noStaticBatch(){ try { long start = System.currentTimeMillis(); conn.setAutoCommit(false);// 取消自动事务提交 String sql1 = "insert into person(name,age) values(?,?)"; ps = conn.prepareStatement(sql1); for (int i = 1; i <= 110; i++) { ps.setString(1, "names " + i); ps.setInt(2, i); ps.addBatch(); if (i % 20 == 0 || i == 110) {// 每20条数据执行一次、到最后必须执行一次 ps.executeBatch();//执行批 try{//这里一定要捕捉异常 conn.commit();// 提交事务 }catch(SQLException exc){ conn.rollback();// 在批处理命令中,如果有一个命令出现了错误,则回滚 } } } System.out.print("总共用时:" + (System.currentTimeMillis() - start) / 1000);// 测试用时 } catch (Exception e) { }finally{//关闭数据库连接 closeDB(); } } static{ try { Class.forName("com.mysql.jdbc.Driver"); conn=DriverManager.getConnection("jdbc:mysql:///test","root","root"); } catch (Exception e) { System.out.println("数据库连接错误"); } } public static void closeDB(){ if(st!=null) try {st.close();} catch (SQLException e1){st=null;} if(ps!=null) try {ps.close();} catch (SQLException e1){ps=null;} if(conn!=null) try {conn.close();}catch (SQLException e){conn=null;} System.out.println("\t 连接已关闭"); } }
相关推荐
在`JDBCBatchInsert.java`中,可以看到如何创建PreparedStatement对象,设置占位符,然后多次调用`addBatch()`添加不同的数据,最后调用`executeBatch()`执行批量插入。 2. **使用Statement的batchUpdate()** ...
`hibernate.jdbc.batch_size`是Hibernate配置中的一个重要参数,用于控制批处理操作的大小。本文将深入探讨这个参数的意义、作用以及如何在实际应用中进行测试。 批量插入是提高数据库性能的有效手段,特别是在大量...
根据提供的部分内容,我们可以提炼出与Hibernate框架相关的两个关键配置参数:`hibernate.jdbc.fetch_size` 和 `hiberate.jdbc.batch_size`。这两个参数对于优化基于Hibernate的数据库操作性能至关重要。 ### 1. ...
假设我们有一个`JDBCBatch.java`文件,我们可以创建一个`batchInsert()`方法,如下所示: ```java public class JDBCBatch { public void batchInsert(List<MyData> dataList) throws SQLException { try ...
6. **批处理(Batch Processing)**:对于需要执行大量相似SQL语句的情况,JDBC提供批处理功能,允许一次发送多个SQL语句,从而提高效率。 7. **JDBC URL**:每个数据库驱动都有一个特定的JDBC URL格式,用于标识要...
此外,还可以通过分析Hibernate的性能指标来调整诸如`hibernate.jdbc.batch_size`等参数,以达到最佳性能平衡。 总之,通过上述几个方面的优化措施,可以显著提高基于Hibernate构建的应用程序的性能。在实际应用中...
Java Database Connectivity(JDBC)是Java编程语言中用于与各种数据库进行交互的一组接口和类。JDBC2000和JDBC2005分别指的是在2000年和2005年时期的JDBC规范版本。这两个版本都是在Java数据库连接技术的发展历程中...
具体而言,他描述了在不同的方法下,如使用Oracle的自定义类型定义表类型、基本类型定义表类型以及JDBC批处理(JDBCBATCH)进行10000条数据的插入,并对比了它们的效率。为了分析这个问题,我们首先需要了解相关技术...
批处理(Batch Updates)则可以一次发送多个SQL语句,减少网络通信开销。 7. **查询结果集处理**: 结果集(ResultSet)对象是执行SQL查询后返回的结果,可以通过迭代遍历,获取每一行数据。同时,达梦JDBC驱动也...
4. **批处理更新(Batch Update)**: - 批处理可以提高数据库操作的性能,避免频繁的网络通信。通过 `Statement` 对象的 `addBatch(String sql)` 方法添加SQL语句到批处理队列,然后通过 `executeBatch()` 执行...
3. **JDBC批处理(JDBCBATCH)**: JDBC提供了一种批处理机制,允许将多个SQL语句组合在一起执行,从而减少与数据库的交互次数,提高性能。在Java中,可以通过调用Statement对象的`addBatch()`方法添加SQL语句到...
在 Hibernate 配置文件中,可以设置 `hibernate.jdbc.batch_size` 参数来指定批量抓取的大小。 如何实现批量更新 在 Controller 层,需要将大量数据插入到数据库时,可以使用以下方法: ```java for (int i = 0; ...
8. **JDBC批量更新失败**: "Could not execute JDBC batch update"可能是因为试图删除与外键关联的数据,检查数据库约束并处理好关联关系。 9. **懒加载问题**: "Stream close"提示没有启用懒加载,需要在Hibernate...
JDBC(Java Database Connectivity)是Java编程语言中用于与关系数据库交互的一种标准接口。它是Java平台的标准部分,允许开发人员使用SQL语言在Java应用程序中执行数据库操作。MySQL JDBC驱动,也称为MySQL ...
另一个常见的问题是在级联操作时,如级联删除,可能会遇到`Hibernate: Could not execute JDBC batch update`的错误。这通常是由于Hibernate在执行数据库更新操作时出现了问题。为了解决这个问题,我们需要在实体类...
2. **批处理更新(Batch Updates)**:允许一次提交多个SQL语句,提高了性能,减少了网络通信。 3. **结果集分页(Scrollable Result Sets)**:提供了向前和向后滚动的能力,以及定位到特定行的功能。 4. **...
- **批量操作**:通过BatchUpdate接口实现多条SQL语句的批量执行。 总的来说,Impala的JDBC驱动包为Java开发者提供了与Impala数据库交互的桥梁,无论是在大数据分析工具、BI应用还是自定义数据处理系统中,都能发挥...
1. **批处理(Batch Processing)**:多个SQL语句可以一起提交,提高性能。 2. **使用连接池(Connection Pool)**:避免频繁创建和关闭连接,减少系统开销。 3. **设置合适的缓冲大小**:调整`ResultSet`的fetch ...