JDBC基础教程之PreparedStatement

JDBC基础教程之PreparedStatement,第1张

JDBC基础教程之PreparedStatement,第2张

摘要

这个PreparedStatement接口继承了语句,并在两个方面与它不同:

PreparedStatement实例包含已编译的SQL语句。这是为了让语句“准备好”。PreparedStatement对象中包含的SQL语句可以有一个或多个in参数。创建SQL语句时,未指定IN参数的值。相反,该语句保留了一个问号(“?)用于每个IN参数。)作为占位符。在执行语句之前,每个问号的值必须由适当的setXXX方法提供。

因为PreparedStatement对象已经过预编译,所以它的执行速度比Statement对象快。因此,执行多次的SQL语句往往被创建为PreparedStatement对象,以提高效率。

PreparedStatement作为Statement的子类,继承了Statement的所有功能。此外,它添加了一整套方法来设置发送到数据库的值,以替换IN参数中的占位符。同时,execute、executeQuery和executeUpdate这三个方法已经更改,因此它们不再需要参数。这些方法的语句形式(接受SQL语句参数的形式)不应用于PreparedStatement对象。

1.创建一个PreparedStatement对象。

(其中con是连接对象)的以下代码段创建了一个PreparedStatement对象,该对象包含一条SQL语句,该语句带有两个in参数占位符:

prepared statement pstmt = con . prepare statement(" UPDATE table 4 SET m =?其中x =?”);

pstmt对象包含语句“UPDATE table4 SET m =?其中x =?”,已经发送到DBMS,准备执行。

2.传入参数

在执行PreparedStatement对象之前,必须设置每个?参数的值。这可以通过调用setXXX方法来完成,其中XXX是对应于该参数的类型。例如,如果参数具有Java类型long,则使用的方法是setLong。setXXX方法的第一个参数是要设置的参数的序号位置,第二个参数是设置给这个参数的值。例如,下面的代码将第一个参数设置为123456789,将第二个参数设置为10000000:

pstmt.setLong(1,123456789);
pstmt.setLong(2,100000000);

一旦设置了给定语句的参数值,就可以使用它多次执行该语句,直到调用clearParameters方法清除它。在默认连接模式下(启用了自动提交),语句将在完成后自动提交或恢复。

如果基本数据库和驱动程序在提交语句后保持这些语句打开,则同一个PreparedStatement可以执行多次。如果不是这样,那么尝试使用PreparedStatement对象而不是Statement对象来提高性能是没有意义的。

使用pstmt(前面创建的PreparedStatement对象),下面的代码演示了如何设置两个参数占位符的值并执行pstmt 10次。如上所述,要做到这一点,数据库不能关闭pstmt。在本例中,第一个参数设置为“hi”并保持不变。在for循环中,第二个参数每次都设置为不同的值:从0开始,到9结束。

pstmt.setString(1," Hi ");
for(int I = 0;i < 10i++) {
pstmt.setInt(2,I);
int rowCount = pstmt . execute update();
}

3.参数中数据类型的一致性

setXXX方法中的XXX是Java类型。它是隐式JDBC类型(通用SQL类型),因为驱动程序会将Java类型映射到相应的JDBC类型(遵循本JDBCGuide中8.6.2“映射Java和JDBC类型”表中指定的映射),并将此JDBC类型发送到数据库。例如,下面的代码片段将PreparedStatement对象pstmt的第二个参数设置为44,Java类型为short:

pstmt.setShort(2,44);

驱动程序将44作为JDBC SMALLINT发送到数据库,这是Java短类型的标准映射。

程序员有责任确保每个IN参数的Java类型被映射到与数据库所需的JDBC数据类型兼容的JDBC类型。考虑数据库需要JDBC·斯莫林的情况。如果使用setByte方法,驱动程序会将JDBC TINYINT发送到数据库。这是可行的,因为许多数据库可以从一种相关类型转换成另一种相关类型,通常TINYINT可以用在SMALLINT适用的任何地方。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » JDBC基础教程之PreparedStatement

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情