学科分类
目录
Java Web

PreparedStatement批处理

当向同一个数据表中批量更新数据时,如果使用Statement,需要书写很多SQL语句,这时,为了避免重复代码的书写,可以使用PreparedStatement 实现批处理。与Statement相比,PreparedStatement 灵活许多,它既可以使用完整的SQL,也可以使用带参数的不完整SQL。但是,对于不完整的SQL,其具体的内容是采用“?”占位符形式出现的,设置时要按照“?”顺序设置具体的内容。

为了帮助大家更好地学习如何使用PreparedStatement 实现批处理,接下来,通过一个案例来演示,如例1所示。

例1 Example11.java

 1  package cn.itcast.jdbc.example;

 2  import java.sql.Connection;

 3  import java.sql.Date;

 4  import java.sql.PreparedStatement ;

 5  import cn.itcast.jdbc.example.utils.JDBCUtils;

 6  public class Example11 {

 7    public static void main(String[] args) {

 8      Connection conn = null;

 9      PreparedStatement preStmt = null;

 10     try {

 11       // 加载并注册数据库驱动

 12        conn=JDBCUtils.getConnection();

 13       String sql = "INSERT INTO users(name,password,email,birthday)"

 14           + "VALUES(?,?,?,?)";

 15       preStmt = conn.prepareStatement(sql);

 16       for (int i = 0; i < 5; i++) {

 17         preStmt.setString(1, "name" + i);

 18         preStmt.setString(2, "password" + i);

 19         preStmt.setString(3, "email" + i + "@itcast.cn");

 20         preStmt.setDate(4, Date.valueOf("1989-02-19"));

 21         preStmt.addBatch();

 22       }

 23       preStmt.executeBatch();

 24     } catch (Exception e) {

 25       e.printStackTrace();

 26     } finally { // 释放资源

 27       JDBCUtils.release(null, preStmt, conn);

 28     }

 29   }

 30 }

程序运行后,users表中会同时添加五条数据。为了查看数据添加是否成功,进入MySQL,使用SELECT语句查看users表,结果如下所示:

mysql> select * from users;

+----+--------+-----------+------------------+------------+

| id | name  | password | email      | birthday  |

+----+--------+-----------+------------------+------------+

| 1 | zs   | 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)

从上述结果可以看出,Example11批量添加了5条数据。由此可见,当向同一个表中批量添加或者更新数据的时候,使用PreparedStatement比较方便。

注意:

批处理执行SELECT语句会报错。因为Statement和PreparedStatement 的executeBatch()方法的返回值都是int[]类型,所以,能够进行批处理的SQL语句必须是INSERT、UPDATE、DELETE等返回值为int类型的SQL语句。

点击此处
隐藏目录