我们可以通过使用 Statement或preparedStatement的对象来执行相应的sql语句,但是有时,当我们需要向数据库发送一批SQL语句执行时,为了避免向数据库一条条的发送执行,我们就应该采用JDBC的批处理机制,以提升执行效率。
实现批处理有两种方式,第一种方式:Statement对象
Statement.addBatch(sql)
例如:我们在在向一个名为me的表中输一批入数据时我们就可以采用批处理来实现。
Connection con =null;
Statement st=null;
ResultSet rs=null;
PreparedStatement ps=null;
publicvoid statementBanch(){
con = DBCManager.getConnect();//获取连接对象
try {
//定义sql语句
String sql = "insertinto me (id,name,age ) values(1,'lisi',13)";
String sql1 = "update me set id =2,name ='zhangsan',age =14 whereid =1";
//创建语句对象
st =con.createStatement();
//添加进批
st.addBatch(sql);
st.addBatch(sql1);
//执行批
st.executeBatch();
} catch (SQLException e) {
// TODO Auto-generatedcatch block
e.printStackTrace();
}
DBCManager.release(null, null, con);
}
这样我们就完成了对于一批有不同的sql句的数据的插入。
但是,还有时候,我们需要向数据库发送的多条语句相同,但仅参数不同的SQL语句时,需重复写上很多条SQL语句,如:
Insert into user(name,password) values(‘aa’,’111’);
Insert into user(name,password) values(‘bb’,’222’);
Insert into user(name,password) values(‘cc’,’333’);
Insert into user(name,password) values(‘dd’,’444’);
这就大大的降低了程序运行的效率,且所有SQL语句没有进行预编译,这样是很不好的,因此,我们便需要借助第二种方式来进行对具有相同特征的一批数据的插入工作。也就是,使用PrepareStatement对象来实现,这种整批数据的录入。
例:
publicvoid prepareStatementBanch(){
con = DBCManager.getConnect();//获取连接对象
try {
//定义sql语句
String sql = "insert into me (id,name,age ) values(?,?,?)";
//创建语句对象
ps =con.prepareStatement(sql);
for(int i=0;i<=10;i++){
//为字段赋值
ps.setInt(1, i+1);
ps.setString(2, "name"+i);
ps.setInt(3, 10+i);
//添加进批
ps.addBatch();
//设置条件当i对10取余为0时,先执行一次批语句,然后将批清除
if(i%10==0){
ps.executeBatch();
ps.clearBatch();
}
}
//将批中剩余的语句执行完毕
ps.executeBatch();
} catch (SQLException e) {
// TODO Auto-generatedcatch block
e.printStackTrace();
}
DBCManager.release(null, ps, con);
}
这样通过采用PreparedStatement.addBatch()实现批处理,发送出去的是通过预编译后的SQL语句,执行起来效率会更高。当然,这样做也有它的不足之处即:只能应用在SQL语句相同,但参数不同的批处理中。因此此种形式的批处理经常用于在同一个表中批量插入数据,或批量更新表的数据。
这样我们以后就可以通过几种不同的方式来实现对于不同类型、不同数量的数据的插入了。
相关推荐
四、批处理与预编译语句 预编译语句(PreparedStatement)在批处理中尤其有用,因为它可以防止SQL注入并提高性能。预编译语句在首次创建时解析SQL,然后只需替换占位符即可多次使用,减少了解析和编译的时间。 五、...
使用`Statement`的`addBatch()`方法添加SQL语句到批处理队列,然后通过`executeBatch()`执行整个批次。 - **批处理在JDBC中的应用**:批量插入、更新或删除,尤其适用于大数据量操作。 4. **预编译SQL语句...
1. 添加批处理:首先创建Statement对象,然后使用addBatch()方法将SQL语句添加到批处理队列。例如: ```java Statement stmt = conn.createStatement(); stmt.addBatch("INSERT INTO table (col1, col2) VALUES ...
批处理是通过设置Statement对象的`addBatch()`方法和`executeBatch()`方法来实现的。下面是一个简单的示例: ```java Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testdb", ...
而PreparedStatement一旦绑定了SQL,就只能执行与之匹配的SQL,无法执行其他不同的SQL语句。 3. **执行效率** 当你需要多次执行相同的SQL语句,但参数不同(例如,查询特定ID的员工信息),PreparedStatement的...
JDBC通过`java.sql.Statement`接口的`addBatch()`和`executeBatch()`方法实现了批处理功能。 ### 2. 使用批处理 创建批处理的基本步骤如下: 1. 创建Statement对象。 2. 使用`addBatch()`方法添加SQL语句到批处理...
1. **批处理API**: JDBC提供了Statement接口的`addBatch()`方法用于添加待执行的SQL语句到批处理队列,`executeBatch()`方法用于执行整个批处理队列。PreparedStatement接口同样支持批处理,提供了一样的方法。 2. ...
8. **批处理与JDBC驱动兼容性**:不同的JDBC驱动对批处理的支持程度不同,有些驱动可能提供了更高级的批处理特性,如Oracle的BULK COLLECT。 在给定的博客链接中,可能详细解释了这些概念,并提供了示例代码来演示...
2. **合理使用PreparedStatement:** PreparedStatement对象比Statement更加高效,因为它支持参数化查询,可以防止SQL注入攻击,并且能够重用预编译的SQL语句,进一步提升性能。 3. **优化代码逻辑:** 避免不必要的...
总结,JDBC是Java开发数据库应用的基础,理解和掌握JDBC的原理和使用方法,能够帮助开发者高效地进行数据库操作,提升应用性能。通过阅读"JDBC NOTES for Connectivity"文档,将有助于深入学习这一关键技能。
6. **批处理**:对于大量相似的SQL操作,可以使用PreparedStatement的addBatch()和executeBatch()方法进行批处理,提高性能。 7. **预编译的PreparedStatement**:相比Statement,PreparedStatement允许预编译SQL...
**JDBC(用PrepareStatement实现)** ...综上,使用PreparedStatement是Java数据库编程中的最佳实践之一,它提供了一种高效、安全的方式来执行SQL语句。在实际项目中,我们应该充分利用这一特性来优化我们的数据库操作。
本文将深入探讨JDBC的核心概念、主要组件及其使用方法。 一、JDBC基本概念 1. JDBC驱动:JDBC驱动是Java程序与数据库之间的桥梁,分为四种类型,从低到高分别为Type 1、Type 2、Type 3和Type 4。Type 4驱动(如...
在JDBC中处理大文本时,需要使用PreparedStatement的setBlob或setClob方法。例如,对于Blob类型,可以先将文件转换为字节数组,然后通过setBlob方法传入。以下是一个简单的示例: ```java File file = new File(...
- **插入数据**:使用PreparedStatement的executeUpdate()方法,将参数占位符与实际值匹配。 - **查询数据**:使用Statement的executeQuery()执行SQL,得到ResultSet,然后遍历结果。 - **更新数据**:同样使用...
4. **执行SQL**:调用Statement/PreparedStatement的executeQuery()或executeUpdate()方法执行SQL。 5. **处理结果**:对于查询,使用ResultSet处理结果;对于DML操作,检查返回的更新计数。 6. **关闭资源**:关闭...
首先,Oracle提供了一种名为SQL*Plus的命令行工具,它是与Oracle数据库交互的主要接口之一,非常适合进行批处理操作。在SQL*Plus中,你可以编写一个批处理脚本(通常为.bat或.sh文件),通过该脚本调用并执行多个....
在描述中提到的基本查询和更新场景中,我们可以使用PreparedStatement的`setXXX()`方法设置参数,其中XXX代表参数类型,如`setString()`、`setInt()`等。例如,查询用户ID为1的数据,可以这样写: ```java String ...
- 使用PreparedStatement代替Statement,提高安全性和性能。 - 通过使用连接池管理数据库连接,避免频繁创建和关闭连接。 - 在操作完毕后,立即关闭ResultSet、Statement和Connection,释放资源。 - 捕获并正确...
- 使用PreparedStatement而非Statement,提高性能并避免SQL注入。 - 适当设置批处理,批量执行多条SQL,提升效率。 - 使用连接池管理数据库连接,提高应用性能并减少资源消耗。 - 注意数据库事务的管理,确保...