PreparedStatement的⽤法
⼀.PreparedStatement 概述
社会责任意识
爱的歌在数据库的操作过程中,PreparedStatement 对象是⼀个很不起眼但是记为重要的接⼝对象,它继承于Statement,并与之在两⽅⾯有所不同:
1)PreparedStatement 实例包含已编译的 SQL 语句。这就是使语句“准备好”。包含于 PreparedStatement 对象中的 SQL 语句可具有⼀个或多个 IN 参数。IN参数的值在 SQL 语句创建时未被指定。相反的,该语句为每个 IN 参数保留⼀个问号(“?”)作为占位符。每个问号的值必须在该语句执⾏之前,通过适当的tXXX ⽅法来提供。
2)由于 PreparedStatement 对象已预编译过,所以其执⾏速度要快于 Statement 对象。因此,多次执⾏的 SQL 语句经常创建为PreparedStatement 对象,以提⾼效率。
作为 Statement 的⼦类,PreparedStatement 继承了 Statement 的所有功能。同时,三种⽅法 execute、 executeQuery 和 executeUpdate 已被更改以使之不再需要参数。这些⽅法的 Statement 形式(接受 SQL 语句参数的形式)不应该⽤于 PreparedStatement 对象。
⼆.PreparedStatement在java中常⽤数据库操作
1 引⽤特定的包
import java.sql.PreparedStatement;
import java.sql.ResultSet;
2 ⼀般实例化⼀个PreparedStatement和结果集
PreparedStatement prepstmt = null;
ResultSet rs = null;
3 得到SQL语句校门
conn 为Connection类型
prepstmt = conn.prepareStatement(String StrSQl);
4 执⾏SQL,得到结果集
rs 为ResultSet类型。
金泽智rs = uteQuery();
三.⼀些具体⽤法
1、创建 PreparedStatement 对象
以下的代码段(其中 con 是 Connection 对象)创建包含带两个 IN 参数占位符的 SQL 语句的 PreparedStatement 对象:
PreparedStatement pstmt = con.prepareStatement(“UPDATE table4 SET m = ? WHERE x = ?”);
PreparedStatement pstmt = con.prepareStatement(“UPDATE table4 SET m = ? WHERE x = ?”);
pstmt 对象包含语句 “UPDATE table4 SET m = ? WHERE x = ?”,它已发送给DBMS,并为执⾏作好了准备。
2、传递 IN 参数
在执⾏ PreparedStatement 对象之前,必须设置每个 ? 参数的值。这可通过调⽤ tXXX ⽅法来完成,其中 XXX 是与该参数相应的类型。
例如,如果参数具有Java 类型 long,则使⽤的⽅法就是 tLong。tXXX ⽅法的第⼀个参数是要设置的参数的序数位置,第⼆个参数是设置给该参数的值。例如,以下代码将第⼀个参数设为 123456789,第⼆个参数设为 100000000:
pstmt.tLong(1, 123456789);
pstmt.tLong(2, 100000000);
⼀旦设置了给定语句的参数值,就可⽤它多次执⾏该语句,直到调⽤clearParameters ⽅法清除它为⽌。在连接的缺省模式下(启⽤⾃动提交),当语句完成时将⾃动提交或还原该语句。
冬鹿孩子帮如果基本数据库和驱动程序在语句提交之后仍保持这些语句的打开状态,则同⼀个 PreparedStatement 可执⾏多次。如果这⼀点不成⽴,那么试图通过使⽤PreparedStatement 对象代替 Statement 对象来提⾼性能是没有意义的。
利⽤ pstmt(前⾯创建的 PreparedStatement 对象),以下代码例⽰了如何设置两个参数占位符的值并执⾏ pstmt 10 次。如上所述,为做到这⼀点,数据库不能关闭 pstmt。在该⽰例中,第⼀个参数被设置为 “Hi”并保持为常数。在 for 循环中,每次都将第⼆个参数设置为不同的值:从 0 开始,到 9 结束。
怎么查字典
pstmt.tString(1, “Hi”);
for (int i = 0; i < 10; i++) {宿舍鬼故事
pstmt.tInt(2, i);
int rowCount = uteUpdate();
}
红枣银耳汤的功效与作用3、IN 参数中数据类型的⼀致性
tXXX ⽅法中的 XXX 是 Java 类型。它是⼀种隐含的 JDBC 类型(⼀般 SQL 类型),因为驱动程序将把 Java 类型映射为相应的 JDBC 类型(遵循该 JDBCGuide中§8.6.2 “映射 Java 和 JDBC 类型”表中所指定的映射),并将该 JDBC 类型发送给数据库。例如,以下代码段将PreparedStatement 对象 pstmt 的第⼆个参数设置为 44,Java 类型为 short:
pstmt.tShort(2, 44);
驱动程序将 44 作为 JDBC SMALLINT 发送给数据库,它是 Java short 类型的标准映射。
程序员的责任是确保将每个 IN 参数的 Java 类型映射为与数据库所需的 JDBC 数据类型兼容的 JDBC 类型。不妨考虑数据库需要JDBC SMALLINT 的情况。如果使⽤⽅法 tByte ,则驱动程序将 JDBC TINYINT 发送给数据库。这是可⾏的,因为许多数据库可从⼀种相关的类型转换为另⼀种类型,并且通常 TINYINT 可⽤于SMALLINT 适⽤的任何地⽅