在实际开发中,经常需要向数据库发送多条SQL语句,这时,如果逐条执行这些SQL语句,效率会很低。为此,JDBC提供了批处理机制,即同时执行多条SQL语句。Statement和PreparedStatement都实现了批处理,本节将针对它们的批处理方式进行详细的讲解。
1.Statement批处理
当向数据库发送多条不同的SQL语句时,可以使用Statement实现批处理。Statement通过addBatch()方法添加一条SQL语句,通过executeBatch()方法批量执行SQL语句。为了帮助读者更好地学习如何使用Statement实现批处理,下面通过一个案例来演示。
package cn.itcast.jdbc.example;
import java.sql.Connection;
import java.sgl.Statement;
import cn.itcast.jdbc.example.utils.JDBCUtils;
public class Example10 {
public static void main (String[] args) {
connection conn=null:
statement stmt=null;
try {
//加载数据库驱动
conn= JDBCUtils.getConnection():
stmt*conn.createStatement();
//SQL语句
String sql1="DROP TABLE IF EXISTS school";
String sq12="CREATE TABLE school (id int,name varchar(20))";
String sql3="INSERT INTO school VALUES(2,'传智播客')";
String sql4="UPDATE school SET id=1";
//Statement 批处理 SQL语句
stmt.addBatch(aql1);
stmt.addBatch (sql2):
stmt.addBatch(sql3);
stmt.addBatch (sq14);
stmt.executeBatch();
} catch (Exception e) {
e.printStackTrace();
} finally{ //释放资源
JDBCUtils.release (null,stmt,conn);
}
}
}
程序运行过程中,Statement会将4条SQL语句提交给数据库一起执行。为了验证例1-13中的SQL语句是否执行成功,进入MySQL,使用SELECT语句查看school表,JhmSQI嘉句的执行结果如下所示。
mysql>select · from school;
+------+--------------+
| id | name |
+------+--------------+
| 1 | 传智播客 |
+------+--------------+
1 row in set (0.00 sec)
从上述结果可以看出,school表存在,并且向表中添加了一条数据,该数据的id被成功修改成了1。
2. PreparedStatement 批处理
当向同一个数据表中批量更新数据时,如果使用Sratement,需要书写很多SQL语句,这时,为了避免重复代码的书写,可以使用PreparedStatement 实现批处理。与Statement相比,PreparedStatement灵活许多,它既可以使用完整的SQL,也可以使用带参数的不完整SQL。但是,对于不完整的SQL,其具体的内容是采用“?”占位符形式出现的,设置时要按照“?”顺序设置具体的内容。
为了帮助读者更好地学习如何使用PreparedStatement实现批处理,下面通过一个案例来演示。
package cn.itcast.jdbc.example;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement ;
import cn.itcast.jdbc.example.utils.JDBCUtils;
public class Exanple11 {
public static void main (String[] args) {
Connection conn=null;
PreparedStatement preStmt=null;
try {
//加载并注册数据库驱动
conn=JDBCUtils.getConnection():
String sql="INSERT INTO users(name,password,email,birthday)"
+"VALUES(?,?,?,?)";
preStmt=conn.prepareStatement(sq1);
for (int i=0;i<5;i++)(
preStmt.setString(1, "name"+i);
preStmt.setString(2,"password"+i);
preStmt.setString(3,"email"+i+"9itcast.cn");
preStmt.setDate(4, Date.valueOf("1989-02-19"));
preStmt.addBatch();
}
preStmt.executeBatch():
} catch (Exception e) {
e.printStackTrace();
} finally{ //释放资源
JDBCUtils.release (null, preStmt, conn);
}
}
}
程序运行后,users表中会同时添加5条数据。为了查看数据添加是否成功,进入MySQL,使用SELECT语句查看 users表,结果如下所示。
mysql>select * from users;
+-----+-----------+------------+--------------------+--------------+
|id | name | password | email | birthday |
+-----+-----------+------------+--------------------+--------------+
| 1 | za | 123456 | zs@sina.com | 1980-12-04 |
| 2 | lisi | 123456 | lisi@sina.com | 1981-12-04 |
| 3 | wangwu | 123456 | wangwu@sina.com | 1979-12-04 |
| 5 | hl | 123 | hl@sina.com | 2015-04-18 |
| 6 | name0 | password0 | email0@itcast.cn | 1989-02-19 |
| 7 | name1 | password1 | email1@itcast.cn | 1989-02-19 |
| 8 | name2 | password2 | email2@itcast.cn | 1989-02-19 |
| 9 | name3 | password3 | email3@itcast.cn | 1989-02-19 |
| 10 | name4 | password4 | email4@itcast.cn | 1989-02-19 |
+-----+-----------+------------+--------------------+--------------+
9 rows in set (0.00 sec)
从上述结果可以看出,Examplel1批量添加了5条数据。由此可见,当向同一个表中批量添加或者更新数据的时候,使用PreparedStatement比较方便。文章来源:https://www.toymoban.com/news/detail-458324.html
注意:批处理执行SELECT语句会报错。因为Statement和 PreparedStatement的executeBatch()方法的返回值都是int[]类型,所以,能够进行批处理的SQL语句必须是INSERT、UPDATE、DELETE等返回值为int类型的SQL语句。文章来源地址https://www.toymoban.com/news/detail-458324.html
到了这里,关于JDBC怎样实现批处理?【案例演示】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!