传送给数据库的 SQL 语句通过一个包含两个步骤的过程来返回结果。首先准备它们,然后处理它们。借助 Statement
对象,这两个阶段对应用程序而言变成一个阶段。PreparedStatement 允许将这两个步骤分开。准备步骤在创建对象时发生,而处理步骤在对
PreparedStatement 对象调用 executeQuery、executeUpdate 或 execute
方法时发生。
如果不添加参数标记,能够将 SQL
处理分割成单独的阶段并没有意义。参数标记放在应用程序中,从而使它能够告诉数据库它在准备时并不具有特定的值,但它在处理之前提供一个值。在 SQL
语句中,参数标记是使用问号表示的。
通过使用参数标记,有可能创建用于特定请求的一般 SQL 语句。例如,给定以下 SQL
查询语句:
SELECT * FROM EMPLOYEE_TABLE WHERE LASTNAME =
'DETTINGER'
这是一个特定的 SQL 语句,它只返回一个值;即关于名为 Dettinger
的雇员的信息。通过添加参数标记,可以使语句更为灵活:
SELECT * FROM EMPLOYEE_TABLE WHERE LASTNAME
= ?
通过简单地将参数标记设置为某个值,可以获取关于表中的任何雇员的信息。
由于前一个 Statement
示例可以只经过一次准备阶段并接着使用不同的参数值来重复地进行处理,所以 PreparedStatement 能够提供比 Statement
更高的性能。
注意:要支持本机 JDBC 驱动程序的语句合用,必须使用
PreparedStatement。
prepareStatement 方法用来创建新的 PreparedStatement 对象。与
createStatement 方法不同,创建 PreparedStatement 对象时必须提供 SQL 语句。在那个时候,对 SQL
语句进行预编译以供使用。例如,假定已存在名为 conn 的 Connection 对象,以下示例将创建 PreparedStatement
对象并准备要在数据库中处理的 SQL 语句。
PreparedStatement ps =
conn.prepareStatement("SELECT * FROM EMPLOYEE_TABLE
WHERE LASTNAME =
?");
与 createStatement 方法相同,重载 prepareStatement 方法的目的是提供对指定 ResultSet
特征的支持。prepareStatement 方法还具有变体,可使用自动生成的键。以下是有效 prepareStatement
方法调用的一些示例:
示例:prepareStatement 方法
注意:请阅读以了解重要的法律信息。
//
New in JDBC 2.0
PreparedStatement ps2 = conn.prepareStatement("SELECT *
FROM
EMPLOYEE_TABLE WHERE LASTNAME = ?",
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATEABLE);
// New in JDBC 3.0
PreparedStatement ps3 =
conn.prepareStatement("SELECT * FROM
EMPLOYEE_TABLE WHERE LASTNAME =
?",
ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATEABLE,
ResultSet.HOLD_CURSOR_OVER_COMMIT);
PreparedStatement ps4 =
conn.prepareStatement("SELECT * FROM
EMPLOYEE_TABLE WHERE LASTNAME = ?",
Statement.RETURN_GENERATED_KEYS);
在可以处理 PreparedStatement
对象之前,必须将每个参数标记设置为一些值。PreparedStatement 对象提供了许多个用于设置参数的方法。所有这些方法的格式均为
set<Type>,其中 <Type> 是 Java 数据类型。这些方法的一些示例包括
setInt、setLong、setString、setTimestamp、setNull 和 setBlob。几乎所有这些方法都有两个参数:
* 第一个参数是该参数在语句中的索引。参数标记具有从 1 开始的编号。
* 第二个参数是要对第一个参数设置的值。有几个 set<Type>
方法具有附加的参数,如 setBinaryStream 上的长度参数。
有关更多信息,请查阅 java.sql 包的 Javadoc。通过对 ps
给出在先前示例中准备的 SQL 语句,以下代码说明了如何在处理之前指定参数值:
ps.setString(1,'Dettinger');
如果尝试处理带有尚未设置的参数标记的 PreparedStatement,则将抛出
SQLException。
注意:在设置参数标记之后,除非发生下列情况,否则参数标记将保持具有同一个值。
* 另一个 set
方法调用更改了该值。
* 调用 clearParameters 方法时除去了该值。
clearParameters
方法将所有参数都标记为尚未设置。在进行 clearParameters 调用之后,在执行下一个过程之前,必须再次对所有参数调用 set
方法。
新的 ParameterMetaData 接口允许检索关于参数的信息。此支持与 ResultSetMetaData
相符并且类似。提供了全面的诸如精度、标度、数据类型、数据类型名以及该参数是否允许空值之类的信息。
分享到:
相关推荐
NULL 博文链接:https://huiminchen.iteye.com/blog/1097332
练习3:使用PreparedStatement插入宠物信息.zip
jdbc2.0版 PreparedStatement接口的用法
MySql练习3:使用PreparedStatement插入宠物信息.zip MySql练习3:使用PreparedStatement插入宠物信息.zip MySql练习3:使用PreparedStatement插入宠物信息.zip
此实例意在解决预处理命令PreparedStatement的setString()方法,在sql2008数据库中写入数据时,会自动补足空格的问题, 同时此实例也解决了当存在自动补足空格的问题时,使用nvarchar可以使查找出来的数据与原输入...
NULL 博文链接:https://chaoyi.iteye.com/blog/2088080
PrepatredStatement实例包含已编译的SQL语句,由于PreparedStatement对象已预编译过哦哦,所以执行速度快于Statement对象。 包含于PreparedStatement对象中的SQL语句具有一个或多个IN参数。IN参数的值在SQL...
9.2 PreparedStatement执行DML语句; 9.2.1 PreparedStatement接口 ; 9.2.2 使用PreparedStatement执行insert操作 ; 9.2.2 使用PreparedStatement执行insert操作 ; 9.2.2 使用PreparedStatement执行insert操作 ;9.2.3...
PreparedStatement接口继承Statement,并与之在两方面有所不同: PreparedStatement 实例包含已编译的 SQL 语句。这就是使语句“准备好”。包含于 PreparedStatement 对象中的 SQL 语句可具有一个或多个 IN 参数。IN...
在java中向访问数据库的sql语句一般放到类PreparedStatement类构造函数中,这里遇到的问题就是向sql语句中用setDate()插入时间时不能用java.util.date,而应用java.sql.date,这里就讲述了解决方法,一种是插入...
PreparedStatement详细用法
1、进入Eclipse环境,新建一个Java Project;...可以使用Statement语句或PreparedStatement语句 4).主函数,用于选择下一步要执行的操作 5).连接方法,连接数据库的4个属性 6).关闭连接 方法,断开数据库连接
关于PreparedStatement插入Date类型值的方法.txt
JDBC基础教程之PreparedStatement.doc )
Statement和PreparedStatement之间的区别
添加联系人方法,需要输入联系人姓名、性别、年龄、联系电话、联系地址等信息,通过PreparedStatement对象执行INSERT INTO语句,将信息插入联系人表中。删除联系人方法,通过WHERE条件查询需要删除的联系人信息,再执行...
在执行SQL命令时,我们有二种选择:可以使用PreparedStatement对象,也可以使用Statement对象。无论多少次地使用同一个SQL命令,PreparedStatement都只对它解析和编译一次。当使用Statement对象时,每次执行一个...
java中PreparedStatement和Statement的区别