Java教程-PreparedStatement接口

PreparedStatement接口
PreparedStatement接口是Statement的子接口,用于执行带参数的查询。
让我们来看一个参数化查询的示例:
String sql = "insert into emp values(?,?,?)";
如你所见,我们在值的位置上使用了参数(?)。它的值将通过调用PreparedStatement的setter方法来设置。
为什么要使用PreparedStatement?
提高性能:如果使用PreparedStatement接口,应用程序的性能将更快,因为查询只编译一次。
如何获取PreparedStatement的实例?
使用Connection接口的prepareStatement()方法来返回PreparedStatement的对象。语法如下:
public PreparedStatement prepareStatement(String query) throws SQLException{}
PreparedStatement接口的方法
PreparedStatement接口的重要方法如下:
方法 | 描述 |
---|---|
public void setInt(int paramIndex, int value) | 将整数值设置给指定的参数索引。 |
public void setString(int paramIndex, String value) | 将字符串值设置给指定的参数索引。 |
public void setFloat(int paramIndex, float value) | 将浮点数值设置给指定的参数索引。 |
public void setDouble(int paramIndex, double value) | 将双精度数值设置给指定的参数索引。 |
public int executeUpdate() | 执行查询。用于创建、删除、插入、更新等操作。 |
public ResultSet executeQuery() | 执行选择查询。返回ResultSet的实例。 |
插入记录的PreparedStatement接口示例
首先按照下面的代码创建表:
create table emp(id number(10),name varchar2(50));
然后通过以下代码将记录插入到该表中:
import java.sql.*;
class InsertPrepared {
public static void main(String args[]) {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "system", "oracle");
PreparedStatement stmt = con.prepareStatement("insert into Emp values(?,?)");
stmt.setInt(1, 101);// 1 specifies the first parameter in the query
stmt.setString(2, "Ratan");
int i = stmt.executeUpdate();
System.out.println(i + " records inserted");
con.close();
} catch (Exception e) {
System.out.println(e);
}
}
}
更新记录的PreparedStatement接口示例
PreparedStatement stmt = con.prepareStatement("update emp set name=? where id=?");
stmt.setString(1, "Sonoo");// 1 specifies the first parameter in the query i.e. name
stmt.setInt(2, 101);
int i = stmt.executeUpdate();
System.out.println(i + " records updated");
删除记录的PreparedStatement接口示例
PreparedStatement stmt = con.prepareStatement("delete from emp where id=?");
stmt.setInt(1, 101);
int i = stmt.executeUpdate();
System.out.println(i + " records deleted");
检索表中记录的PreparedStatement接口示例
PreparedStatement stmt = con.prepareStatement("select * from emp");
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
System.out.println(rs.getInt(1) + " " + rs.getString(2));
}