public interface PreparedStatement
表示预编译的 SQL 语句的对象。
SQL 语句被预编译并存储在 PreparedStatement
对象中。然后可以使用此对象多次高效地执行该语句。
注:用于设置 IN 参数值的设置方法(setShort
、setString
等等)必须指定与输入参数的已定义 SQL 类型兼容的类型。例如,如果 IN 参数具有 SQL 类型 INTEGER
,那么应该使用 setInt
方法。
如果需要任意参数类型转换,使用 setObject
方法时应该将目标 SQL 类型作为其参数。
在以下设置参数的示例中,con
表示一个活动连接:
PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES SET SALARY = ? WHERE ID = ?"); pstmt.setBigDecimal(1, 153833.00) pstmt.setInt(2, 110592)
字段摘要 |
---|
从接口 java.sql.Statement 继承的字段 |
---|
CLOSE_ALL_RESULTS, CLOSE_CURRENT_RESULT, EXECUTE_FAILED, KEEP_CURRENT_RESULT, NO_GENERATED_KEYS, RETURN_GENERATED_KEYS, SUCCESS_NO_INFO |
方法摘要 | |
---|---|
void |
addBatch() 将一组参数添加到此 PreparedStatement 对象的批处理命令中。 |
void |
clearParameters() 立即清除当前参数值。 |
boolean |
execute() 在此 PreparedStatement 对象中执行 SQL 语句,该语句可以是任何种类的 SQL 语句。 |
ResultSet |
executeQuery() 在此 PreparedStatement 对象中执行 SQL 查询,并返回该查询生成的 ResultSet 对象。 |
int |
executeUpdate() 在此 PreparedStatement 对象中执行 SQL 语句,该语句必须是一个 SQL 数据操作语言(Data Manipulation Language,DML)语句,比如 INSERT 、UPDATE 或 DELETE 语句;或者是无返回内容的 SQL 语句,比如 DDL 语句。 |
ResultSetMetaData |
getMetaData() 获取包含有关 ResultSet 对象列信息的 ResultSetMetaData 对象,ResultSet 对象将在执行此 PreparedStatement 对象时返回。 |
ParameterMetaData |
getParameterMetaData() 获取此 PreparedStatement 对象的参数的编号、类型和属性。 |
void |
setArray(int parameterIndex, Array x) 将指定参数设置为给定 java.sql.Array 对象。 |
void |
setAsciiStream(int parameterIndex, InputStream x) 将指定参数设置为给定输入流。 |
void |
setAsciiStream(int parameterIndex, InputStream x, int length) 将指定参数设置为给定输入流,该输入流将具有给定字节数。 |
void |
setAsciiStream(int parameterIndex, InputStream x, long length) 将指定参数设置为给定输入流,该输入流将具有指定字节数。 |
void |
setBigDecimal(int parameterIndex, BigDecimal x) 将指定参数设置为给定 java.math.BigDecimal 值。 |
void |
setBinaryStream(int parameterIndex, InputStream x) 将指定参数设置为给定输入流。 |
void |
setBinaryStream(int parameterIndex, InputStream x, int length) 将指定参数设置为给定输入流,该输入流将具有给定字节数。 |
void |
setBinaryStream(int parameterIndex, InputStream x, long length) 将指定参数设置为给定输入流,该输入流将具有指定字节数。 |
void |
setBlob(int parameterIndex, Blob x) 将指定参数设置为给定 java.sql.Blob 对象。 |
void |
setBlob(int parameterIndex, InputStream inputStream) 将指定参数设置为 InputStream 对象。 |
void |
setBlob(int parameterIndex, InputStream inputStream, long length) 将指定参数设置为 InputStream 对象。 |
void |
setBoolean(int parameterIndex, boolean x) 将指定参数设置为给定 Java boolean 值。 |
void |
setByte(int parameterIndex, byte x) 将指定参数设置为给定 Java byte 值。 |
void |
setBytes(int parameterIndex, byte[] x) 将指定参数设置为给定 Java byte 数组。 |
void |
setCharacterStream(int parameterIndex, Reader reader) 将指定参数设置为给定 Reader 对象。 |
void |
setCharacterStream(int parameterIndex, Reader reader, int length) 将给定参数设置为给定 Reader 对象,该对象具有给定字符数长度。 |
void |
setCharacterStream(int parameterIndex, Reader reader, long length) 将指定参数设置为给定 Reader 对象,该对象具有给定字符数长度。 |
void |
setClob(int parameterIndex, Clob x) 将指定参数设置为给定 java.sql.Clob 对象。 |
void |
setClob(int parameterIndex, Reader reader) 将指定参数设置为 Reader 对象。 |
void |
setClob(int parameterIndex, Reader reader, long length) 将指定参数设置为 Reader 对象。 |
void |
setDate(int parameterIndex, Date x) 使用运行应用程序的虚拟机的默认时区将指定参数设置为给定 java.sql.Date 值。 |
void |
setDate(int parameterIndex, Date x, Calendar cal) 使用给定的 Calendar 对象将指定参数设置为给定 java.sql.Date 值。 |
void |
setDouble(int parameterIndex, double x) 将指定参数设置为给定 Java double 值。 |
void |
setFloat(int parameterIndex, float x) 将指定参数设置为给定 Java REAL 值。 |
void |
setInt(int parameterIndex, int x) 将指定参数设置为给定 Java int 值。 |
void |
setLong(int parameterIndex, long x) 将指定参数设置为给定 Java long 值。 |
void |
setNCharacterStream(int parameterIndex, Reader value) 将指定参数设置为 Reader 对象。 |
void |
setNCharacterStream(int parameterIndex, Reader value, long length) 将指定参数设置为 Reader 对象。 |
void |
setNClob(int parameterIndex, NClob value) 将指定参数设置为 java.sql.NClob 对象。 |
void |
setNClob(int parameterIndex, Reader reader) 将指定参数设置为 Reader 对象。 |
void |
setNClob(int parameterIndex, Reader reader, long length) 将指定参数设置为 Reader 对象。 |
void |
setNString(int parameterIndex, String value) 将指定参数设置为给定 String 对象。 |
void |
setNull(int parameterIndex, int sqlType) 将指定参数设置为 SQL NULL 。 |
void |
setNull(int parameterIndex, int sqlType, String typeName) 将指定参数设置为 SQL NULL 。 |
void |
setObject(int parameterIndex, Object x) 使用给定对象设置指定参数的值。 |
void |
setObject(int parameterIndex, Object x, int targetSqlType) 使用给定对象设置指定参数的值。 |
void |
setObject(int parameterIndex, Object x, int targetSqlType, int scaleOrLength) 使用给定对象设置指定参数的值。 |
void |
setRef(int parameterIndex, Ref x) 将指定参数设置为给定 REF(<structured-type>) 值。 |
void |
setRowId(int parameterIndex, RowId x) 将指定参数设置为给定 java.sql.RowId 对象。 |
void |
setShort(int parameterIndex, short x) 将指定参数设置为给定 Java short 值。 |
void |
setSQLXML(int parameterIndex, SQLXML xmlObject) 将指定参数设置为给定 java.sql.SQLXML 对象。 |
void |
setString(int parameterIndex, String x) 将指定参数设置为给定 Java String 值。 |
void |
setTime(int parameterIndex, Time x) 将指定参数设置为给定 java.sql.Time 值。 |
void |
setTime(int parameterIndex, Time x, Calendar cal) 使用给定的 Calendar 对象将指定参数设置为给定 java.sql.Time 值。 |
void |
setTimestamp(int parameterIndex, Timestamp x) 将指定参数设置为给定 java.sql.Timestamp 值。 |
void |
setTimestamp(int parameterIndex, Timestamp x, Calendar cal) 使用给定的 Calendar 对象将指定参数设置为给定 java.sql.Timestamp 值。 |
void |
setUnicodeStream(int parameterIndex, InputStream x, int length) 已过时。 |
void |
setURL(int parameterIndex, URL x) 将指定参数设置为给定 java.net.URL 值。 |
从接口 java.sql.Wrapper 继承的方法 |
---|
isWrapperFor, unwrap |
方法详细信息 |
---|
ResultSet executeQuery() throws SQLException
PreparedStatement
对象中执行 SQL 查询,并返回该查询生成的
ResultSet
对象。
ResultSet
对象;不会返回
null
SQLException
- 如果发生数据库访问错误,在关闭的
PreparedStatement
上调用此方法,或者 SQL 语句没有返回
ResultSet
对象
int executeUpdate() throws SQLException
PreparedStatement
对象中执行 SQL 语句,该语句必须是一个 SQL 数据操作语言(Data Manipulation Language,DML)语句,比如
INSERT
、
UPDATE
或
DELETE
语句;或者是无返回内容的 SQL 语句,比如 DDL 语句。
SQLException
- 如果发生数据库访问错误,在关闭的
PreparedStatement
上调用此方法,或者 SQL 语句返回一个
ResultSet
对象
void setNull(int parameterIndex, int sqlType) throws SQLException
NULL
。
注:必须指定参数的 SQL 类型。
parameterIndex
- 第一个参数是 1,第二个参数是 2,……
sqlType
-
java.sql.Types
中定义的 SQL 类型代码
SQLException
- 如果 parameterIndex 不对应于 SQL 语句中的参数标记;如果发生数据库访问错误,或者在关闭的
PreparedStatement
上调用此方法
SQLFeatureNotSupportedException
- 如果
sqlType
是
ARRAY
、
BLOB
、
CLOB
、
DATALINK
、
JAVA_OBJECT
、
NCHAR
、
NCLOB
、
NVARCHAR
、
LONGNVARCHAR
、
REF
、
ROWID
、
SQLXML
或
STRUCT
数据类型之一并且 JDBC 驱动程序不支持此数据类型
void setBoolean(int parameterIndex, boolean x) throws SQLException
boolean
值。在将此值发送到数据库时,驱动程序将它转换成一个 SQL
BIT
或
BOOLEAN
值。
parameterIndex
- 第一个参数是 1,第二个参数是 2,……
x
- 参数值
SQLException
- 如果 parameterIndex 不对应于 SQL 语句中的参数标记;如果发生数据库访问错误,或者在关闭的
PreparedStatement
上调用此方法
void setByte(int parameterIndex, byte x) throws SQLException
byte
值。在将此值发送到数据库时,驱动程序将它转换成一个 SQL
TINYINT
值。
parameterIndex
- 第一个参数是 1,第二个参数是 2,……
x
- 参数值
SQLException
- 如果 parameterIndex 不对应于 SQL 语句中的参数标记;如果发生数据库访问错误,或者在关闭的
PreparedStatement
上调用此方法
void setShort(int parameterIndex, short x) throws SQLException
short
值。在将此值发送到数据库时,驱动程序将它转换成一个 SQL
SMALLINT
值。
parameterIndex
- 第一个参数是 1,第二个参数是 2,……
x
- 参数值
SQLException
- 如果 parameterIndex 不对应于 SQL 语句中的参数标记;如果发生数据库访问错误,或者在关闭的
PreparedStatement
上调用此方法
void setInt(int parameterIndex, int x) throws SQLException
int
值。在将此值发送到数据库时,驱动程序将它转换成一个 SQL
INTEGER
值。
parameterIndex
- 第一个参数是 1,第二个参数是 2,……
x
- 参数值
SQLException
- 如果 parameterIndex 不对应于 SQL 语句中的参数标记;如果发生数据库访问错误,或者在关闭的
PreparedStatement
上调用此方法
void setLong(int parameterIndex, long x) throws SQLException
long
值。在将此值发送到数据库时,驱动程序将它转换成一个 SQL
BIGINT
值。
parameterIndex
- 第一个参数是 1,第二个参数是 2,……
x
- 参数值
SQLException
- 如果 parameterIndex 不对应于 SQL 语句中的参数标记;如果发生数据库访问错误,或者在关闭的
PreparedStatement
上调用此方法
void setFloat(int parameterIndex, float x) throws SQLException
REAL
值。在将此值发送到数据库时,驱动程序将它转换成一个 SQL
FLOAT
值。
parameterIndex
- 第一个参数是 1,第二个参数是 2,……
x
- 参数值
SQLException
- 如果 parameterIndex 不对应于 SQL 语句中的参数标记;如果发生数据库访问错误,或者在关闭的
PreparedStatement
上调用此方法
void setDouble(int parameterIndex, double x) throws SQLException
double
值。在将此值发送到数据库时,驱动程序将它转换成一个 SQL
DOUBLE
值。
parameterIndex
- 第一个参数是 1,第二个参数是 2,……
x
- 参数值
SQLException
- 如果 parameterIndex 不对应于 SQL 语句中的参数标记;如果发生数据库访问错误,或者在关闭的
PreparedStatement
上调用此方法
void setBigDecimal(int parameterIndex, BigDecimal x) throws SQLException
java.math.BigDecimal
值。在将此值发送到数据库时,驱动程序将它转换成一个 SQL
NUMERIC
值。
parameterIndex
- 第一个参数是 1,第二个参数是 2,……
x
- 参数值
SQLException
- 如果 parameterIndex 不对应于 SQL 语句中的参数标记;如果发生数据库访问错误,或者在关闭的
PreparedStatement
上调用此方法
void setString(int parameterIndex, String x) throws SQLException
String
值。在将此值发送给数据库时,驱动程序将它转换成一个 SQL
VARCHAR
或
LONGVARCHAR
值(取决于该参数相对于驱动程序在
VARCHAR
值上的限制的大小)。
parameterIndex
- 第一个参数是 1,第二个参数是 2,……
x
- 参数值
SQLException
- 如果 parameterIndex 不对应于 SQL 语句中的参数标记;如果发生数据库访问错误,或者在关闭的
PreparedStatement
上调用此方法
void setBytes(int parameterIndex, byte[] x) throws SQLException
VARBINARY
或
LONGVARBINARY
值(取决于该参数相对于驱动程序在
VARBINARY
值上的限制的大小)。
parameterIndex
- 第一个参数是 1,第二个参数是 2,……
x
- 参数值
SQLException
- 如果 parameterIndex 不对应于 SQL 语句中的参数标记;如果发生数据库访问错误,或者在关闭的
PreparedStatement
上调用此方法
void setDate(int parameterIndex, Date x) throws SQLException
java.sql.Date
值。在将此值发送到数据库时,驱动程序将它转换成一个 SQL
DATE
值。
parameterIndex
- 第一个参数是 1,第二个参数是 2,……
x
- 参数值
SQLException
- 如果 parameterIndex 不对应于 SQL 语句中的参数标记;如果发生数据库访问错误,或者在关闭的
PreparedStatement
上调用此方法
void setTime(int parameterIndex, Time x) throws SQLException
java.sql.Time
值。在将此值发送到数据库时,驱动程序将它转换成一个 SQL
TIME
值。
parameterIndex
- 第一个参数是 1,第二个参数是 2,……
x
- 参数值
SQLException
- 如果 parameterIndex 不对应于 SQL 语句中的参数标记;如果发生数据库访问错误,或者在关闭的
PreparedStatement
上调用此方法
void setTimestamp(int parameterIndex, Timestamp x) throws SQLException
java.sql.Timestamp
值。在将此值发送到数据库时,驱动程序将它转换成一个 SQL
TIMESTAMP
值。
parameterIndex
- 第一个参数是 1,第二个参数是 2,……
x
- 参数值
SQLException
- 如果 parameterIndex 不对应于 SQL 语句中的参数标记;如果发生数据库访问错误,或者在关闭的
PreparedStatement
上调用此方法
void setAsciiStream(int parameterIndex, InputStream x, int length) throws SQLException
LONGVARCHAR
参数时,通过
java.io.InputStream
发送它可能更为实际。将根据需要从流中读取数据,一直读取到文件末尾。JDBC 驱动程序将执行从 ASCII 到数据库 char 格式的任何必要转换。
注:此流对象既可以是一个标准 Java 流对象,也可以是实现标准接口的用户自己的子类。
parameterIndex
- 第一个参数是 1,第二个参数是 2,……
x
- 包含 ASCII 参数值的 Java 输入流
length
- 流中的字节数
SQLException
- 如果 parameterIndex 不对应于 SQL 语句中的参数标记;如果发生数据库访问错误,或者在关闭的
PreparedStatement
上调用此方法
void setUnicodeStream(int parameterIndex, InputStream x, int length) throws SQLException
LONGVARCHAR
参数时,通过
java.io.InputStream
对象发送它可能更为实际。将根据需要从流中读取数据,一直读取到文件末尾。JDBC 驱动程序将执行从 Unicode 到数据库 char 格式的任何必要转换。根据 Java 虚拟机规范中的定义,Unicode 流的字节格式必须是 Java UTF-8。
注:此流对象既可以是一个标准 Java 流对象,也可以是实现标准接口的用户自己的子类。
parameterIndex
- 第一个参数是 1,第二个参数是 2,……
x
- 包含 Unicode 参数值的
java.io.InputStream
对象
length
- 流中的字节数
SQLException
- 如果 parameterIndex 不对应于 SQL 语句中的参数标记;如果发生数据库访问错误,或者在关闭的
PreparedStatement
上调用此方法
SQLFeatureNotSupportedException
- 如果 JDBC 驱动程序不支持此方法
void setBinaryStream(int parameterIndex, InputStream x, int length) throws SQLException
LONGVARBINARY
参数时,通过
java.io.InputStream
对象发送它可能更为实际。将根据需要从流中读取数据,一直读取到文件末尾。
注:此流对象既可以是一个标准 Java 流对象,也可以是实现标准接口的用户自己的子类。
parameterIndex
- 第一个参数是 1,第二个参数是 2,……
x
- 包含二进制参数值的 Java 输入流
length
- 流中的字节数
SQLException
- 如果 parameterIndex 不对应于 SQL 语句中的参数标记;如果发生数据库访问错误,或者在关闭的
PreparedStatement
上调用此方法
void clearParameters() throws SQLException
通常参数值对语句的重复使用仍然有效。设置一个参数值会自动清除其以前的值。不过,在某些情况下,直接释放当前参数值使用的资源也是很有用的;这可以通过调用 clearParameters
方法实现。
SQLException
- 如果发生数据库访问错误,或者在关闭的
PreparedStatement
上调用此方法
void setObject(int parameterIndex, Object x, int targetSqlType) throws SQLException