学科分类
目录
Java Web

PreparedStatement对象

在上一小节中,SQL语句的执行是通过Statement对象实现的。Statement对象每次执行SQL语句时,都会对其进行编译。当相同的SQL语句执行多次时,Statement对象就会使数据库频繁编译相同的SQL语句,从而降低数据库的访问效率。

为了解决上述问题,Statement提供了一个子类PreparedStatement。PreparedStatement对象可以对SQL语句进行预编译。也就是说,当相同的SQL语句再次执行时,数据库只需使用缓冲区中的数据,而不需要对SQL语句再次编译,从而有效提高数据的访问效率。为了大家快速了解PreparedStatement对象的使用,接下来,通过一个案例来演示,如例1所示。

例1 Example02.java

 1  package cn.itcast.jdbc.example;

 2  import java.sql.Connection;

 3  import java.sql.DriverManager;

 4  import java.sql.PreparedStatement ;

 5  import java.sql.SQLException;

 6  public class Example02 {

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

 8      Connection conn = null;

 9      PreparedStatement preStmt = null;

 10     try {

 11        // 加载数据库驱动

 12       Class.forName("com.mysql.jdbc.Driver");

 13       String url = "jdbc:mysql://localhost:3306/chapter01";

 14       String username = "root";

 15       String password = "itcast";

 16        // 创建应用程序与数据库连接的Connection对象

 17       conn = DriverManager.getConnection(url, username, password);

 18       // 执行的SQL语句

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

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

 21        // 创建执行SQL语句的PreparedStatement 对象

 22       preStmt = conn.prepareStatement(sql);

 23       preStmt.setString(1, "zl");

 24       preStmt.setString(2, "123456");

 25       preStmt.setString(3, "zl@sina.com");

 26       preStmt.setString(4, "1789-12-23");

 27       preStmt.executeUpdate();

 28     } catch (ClassNotFoundException e) {

 29       e.printStackTrace();

 30     } finally {  // 释放资源

 31       if (preStmt != null) {

 32         try {

 33           preStmt.close();

 34         } catch (SQLException e) {

 35           e.printStackTrace();

 36         }

 37         preStmt = null;

 38       }

 39       if (conn != null) {

 40         try {

 41           conn.close();

 42         } catch (SQLException e) {

 43           e.printStackTrace();

 44         }

 45         conn = null;

 46       }

 47     }

 48   }

 49 }

例1演示了使用PreparedStatement对象执行SQL语句的步骤。首先通过Connection对象的prepareStatement()方法生成PreparedStatement 对象,然后调用PreparedStatement 对象的setXxx()方法,给SQL语句中的参数赋值,最后通过调用executeUpdate()方法执行SQL语句。

例1运行成功后,会在数据库chapter01的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 |

| 4 | zl   | 123456  | zl@sina.com   | 1789-12-23 |

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

4 rows in set (0.00 sec)

从上述结果可以看出,users表中多了一条数据,说明PreparedStatement 对象可以成功执行对数据库的操作。

点击此处
隐藏目录