学科分类
目录
Java基础

PreparedStatement接口

Statement接口封装了JDBC执行SQL语句的方法,虽然可以完成Java程序执行SQL语句的操作,但是在实际开发过程中往往需要将程序中的变量作为SQL语句的查询条件,而使用Statement接口操作这些SQL语句会过于繁琐,并且存在安全方面的问题。针对这一问题,JDBC API 中提供了扩展的PreparedStatement接口。

PreparedStatement是Statement的子接口,用于执行预编译的SQL语句。该接口扩展了带有参数SQL语句的执行操作,应用接口中的SQL语句可以使用占位符“?”来代替其参数,然后通过setXxx()方法为SQL语句的参数赋值。

在PreparedStatement接口中,提供了一些常用方法,具体如表1所示。

表1 PreparedStatement 接口中的常用方法

方法声明 功能描述
int executeUpdate() 在此PreparedStatement对象中执行 SQL 语句,该语句必须是一个DML语句或者是无返回内容的SQL 语句,如 DDL 语句
ResultSet executeQuery() 在此PreparedStatement对象中执行 SQL 查询,该方法返回的是ResultSet对象
void setInt(int parameterIndex, int x) 将指定参数设置为给定的int值
void setFloat(int parameterIndex, float x) 将指定参数设置为给定的float值
void setString(int parameterIndex, String x) 将指定参数设置为给定的String值
void setDate(int parameterIndex, Date x) 将指定参数设置为给定的Date值
void addBatch() 将一组参数添加到此PreparedStatement对象的批处理命令中
void setCharacterStream(int parameterIndex, java.io.Reader reader, int length) 将指定的输入流写入数据库的文本字段
void setBinaryStream(int parameterIndex, java.io.InputStream x, int length) 将二进制的输入流数据写入到二进制字段中

需要注意的是,表9-4中的setDate()方法可以设置日期内容,但参数Date的类型必须是java.sql.Date,而不是java.util.Date。

在为SQL语句中的参数赋值时,可以通过输入参数与SQL类型相匹配的setXxx()方法,例如字段的数据类型为int或Integer,那么应该使用setInt()方法,也可以通过setObject()方法设置多种类型的输入参数。具体如下所示:

// 假设users表中字段id、name、email类型分别是int、varchar、varchar
String sql = "INSERT INTO users(id,name,email) VALUES(?,?,?)";
PreparedStatement  preStmt = conn.prepareStatement(sql);
preStmt.setInt(1, 1);                    //使用参数与SQL类型相匹配的方法
preStmt.setString(2, "zhangsan");      //使用参数与SQL类型相匹配的方法
preStmt.setObject(3, "zs@sina.com");  //使用setObject()方法设置参数
preStmt.executeUpdate();
点击此处
隐藏目录