动态查询 API:prepareQuery() 和 executePlan() 方法

使用这些方法可以更有效地分配与动态查询关联的开销。它们在功能上相当于 JDBC API 的 prepareStatement() 和 executeQuery() 方法。

要执行动态 Enterprise JavaBeans (EJB) 查询,应用程序服务器必须在运行时将查询字符串解析为结构化查询语言 (SQL)。当然,您可以通过选择执行标准 EJB 查询而不是动态查询来避免运行时开销。标准查询有时被称为部署查询,在部署时解析和构建它们,然后由 finder 或 select 方法执行。

您还可以选择编写代码,此代码将再分发动态查询开销以实现更高的应用程序性能。首先调用 prepareQuery() 方法,以它取代 executeQuery() 方法。prepareQuery() 方法将对查询进行解析和转换,返回一个名为 query plan 的字符串。该计划包含解析和转换操作生成的 SQL 语句以及动态查询 API 所需的其他信息。将这个字符串保存在您的应用程序中并对字符串调用 executePlan() 方法以运行查询。(您可能只希望使用 prepareQuery() 方法来查看 SQL 转换结果;只需调用此方法即可显示返回值。)

在 prepareQuery() 和 executePlan() 方法调用中,将查询的参数作为一组 Object 类型传递。确保您传递了适当的数据类型,因为当应用程序服务器处理 prepareQuery() 方法调用时,它将根据参数类型(而不是实际值)对查询进行验证。

示例代码

注: 在以下示例代码中,第一个 executePlan() 方法调用以 parms[0] 取代 ?1。因此,执行的第一个查询在功能上等价于以下查询语句:
select e.name as name, object(e) as emp from EmpBean e where e.salary < 50000
第二个调用运行的查询在功能上相当于这个语句:
select e.name as name, object(e) as emp from EmpBean e where e.salary < 60000

示例:

String query = 
select e.name as name , object(e) as emp from EmpBean e where e.salary < ?1; 
QueryIterator it = null;
Integer[] parms = new Integer[1];
parms[0] = new Integer(0);

在调用 prepareQuery() 时,传递任何整数值。这样将把 ?1 定义为 Integer 类型,如下所示:

String queryPlan= qb.prepareQuery(query, parms, null );

   parms[0] = new Integer(50000);

接着,您以实际值 Integer(50000)?1 运行查询:

select e.name as name, object(e) as emp from EmpBean e where e.salary < 50000it =
 qb.executePlan( queryPlan, parms, 0, 99);

parms[0] = new Integer(60000);

以一个不同的值 Integer(60000)?1 再次运行查询:

it = qb.executePlan( queryPlan, parms, 0, 99);

指示主题类型的图标 参考主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rque_advancedmethods
文件名:rque_advancedmethods.html