已预编译过的PreparedStatement

95 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第10天,点击查看活动详情

PreparedStatement对象其实是在Statement对象的基础上进行了提升,在数据库的实际操作中,经常要多次执行一些仅仅是条件参数不同的SQL语句。为提高SQL语句执行效率,JDBC专门提供了一个特殊的SQL执行语句对象PreparedStatement支持带参数的数据库查询。

PreparedStatement实例包含已编译的SQL语句,这也是将其命名冠以Prepared的原因。包含于PreparedStatement对象中的SQL语句可具有一个或多个IN参数。IN参数的值在SQL语句创建时未被指定。相反,该语句为每个IN参数保留一个问号(?)作为占位符。每个问号的值必须在该语句执行之前通过适当的setXXX方法提供。

PreparedStatement与Statement相比,由于PreparedStatement对象已预编译过,所以其执行速度要快于Statement对象。因此多次执行的SQL语句经常创建为PreparedStatement对象,以提高效率。作Statement的子类,PreparedStatement继承了Statement的所有功能。另外,它还添加了一整套方法,用于设置发送给数据库以取代IN参数占位符的值。同时,execute、executeQuery和executeUpdate三种方法已被更改为不再需要参数。

PreparedStatement的实现:

以下的代码段从Connection对象con创建包含带两个IN参数占位符的SQL语句的PreparedStatement对象: PreparedStatement pstmt = con.prepareStatement("UPDATE table1 SET m = ? WHERE x = ?");

pstmt对象包含语句“UPDATE table1 SET m=?WHERE x=?”,它已发送给数据库系统,并为执行做好了准备。下面需要做的是向数据库传递IN参数。 在执行PreparedStatement对象之前,必须设置每个“?”参数的值。这可通过调用setXXX方法完成,其中XXX是与该参数相应的类型。例如,如果参数具有Java类型long,则使用的方法是setLong。setXXX方法的第一个参数是设置参数的序数位置,第二个参数是设置给该参数的值。注意:参数的序数是从1开始计数。 一旦设置了给定语句的参数值,就可用它多次执行该语句,直到调用clearParameters方法清除它为止。

以上内容就是关于PreparedStatement的使用,它的使用在Statement的基础上又添加了新的方法,速度也有很大的提高。