将参数传递给SELECT语句的IN子句.doc_第1页
将参数传递给SELECT语句的IN子句.doc_第2页
将参数传递给SELECT语句的IN子句.doc_第3页
将参数传递给SELECT语句的IN子句.doc_第4页
将参数传递给SELECT语句的IN子句.doc_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

将参数传递给 SELECT 语句的 IN 子句作者:Sanjay Dhamankar,2005 年 12 月通过使用 Sun Java Studio Creator 2 IDE 中的查询编辑器,您可以轻松地创建大量复杂的查询,其中包括那些带有参数化 IN 子句的查询。在某些情况下,您可能需要执行包含 IN 子句(带有参数或参数列表)的查询 SQL SELECT 语句。也就是说,您希望查询能够接受 IN 子句可利用的一个或一组参数。例如,您可能需要构造一个从表中选取某些列的 SQL SELECT 语句,它使用 WHERE 子句将选择范围限定在与值列表中的特定列值(作为参数传递给查询)相匹配的列。如果要为样例 TRAVEL 数据库中的 TRIP 表构造此类查询,您可以使用以下 SELECT 语句,返回其标识符与 1、4 或 5 相匹配的个人的旅行情况:SELECT ALL TRAVEL.TRIP.TRIPID,TRAVEL.TRIP.PERSONID,TRAVEL.TRIP.DEPDATE,TRAVEL.TRIP.DEPCITY,TRAVEL.TRIP.DESTCITY,TRAVEL.TRIP.TRIPTYPEIDFROM TRAVEL.TRIPWHERE TRAVEL.TRIP.PERSONID IN ( 1,4,5 )但是,您需要将这些值(1、4 和 5)作为参数进行传递,而不是对它们进行硬编码。您可以使用 Java Studio Creator 2 查询编辑器来构造一些 SELECT 语句,它们将参数作为 IN 子句的一部分进行处理。本技术提示说明了如何完成此类操作,您甚至可以事先不了解查询所需的参数数量。我们可以从比较简单的示例入手。如果您在设计查询时已知晓参数的数量,则在设置 IN 子句时,其参数数量应当是执行查询时所需的参数数量。SELECT 语句中的每个参数都使用问号 (?) 占位符来表示。例如,可以按以下方式更改上面的 SELECT 语句,使之可以接受 IN 子句的参数。SELECT ALL TRAVEL.TRIP.TRIPID,TRAVEL.TRIP.PERSONID,TRAVEL.TRIP.DEPDATE,TRAVEL.TRIP.DEPCITY,TRAVEL.TRIP.DESTCITY,TRAVEL.TRIP.TRIPTYPEIDFROM TRAVEL.TRIPWHERE TRAVEL.TRIP.PERSONID IN ( ?, ?, ?)请注意,IN 子句在圆括号内包含了三个参数占位符 (?),这表示在执行时需要为此特定查询传递三个参数。 使用 Java Studio Creator 2 查询编辑器,您可以方便地将这些类型的查询结合在一起。请右键单击查询编辑器网格窗格中的列以打开“添加查询条件”对话框。将“比较”字段设置为下拉选项列表中的 IN,然后选择“参数”单选按钮,将条件设置为 ( ?, ?, ? )。在完成该对话框后,网格窗格中的“条件”列将反映您所做的更改(请参见图 1)。图 1:设置 IN 子句的参数您甚至可以通过查询编辑器测试此查询。从图表窗格或 SQL 窗格弹出式菜单中选择“运行查询”。因为查询现在包含一些参数,所以系统将打开“指定参数值”对话框,您可以在其中输入参数值。在上面的示例中,对话框会提示您输入三个值。您可以在查询编辑器的底部窗格中查看查询结果。图 2 显示了将 PERSONID 设置为 1、4 和 5 来运行此参数化 SQL SELECT 语句时,查询编辑器中显示出的该语句及运行结果。图 2:带有参数化 IN 子句的查询截至目前,您已指定并设置了查询。现在,我们需要在应用程序中添加代码,这样在调用查询时,应用程序会将参数值传递给 SELECT 语句。为此,应用程序需要在查询行集上调用 setObject 方法。setObject 方法将在运行时设置这些参数值。请参阅相关的行集文档和 API。如果在设计查询时并不知道所需的参数数量,则必须在运行时创建包含 ? 占位符的查询,这些占位符的数量取决于所需的参数数量。动态创建查询后,请使用上述 setObject 方法来动态设置每个参数值。 在应用程序中实现此操作时,您会发现以下代码示例非常有用。请记住,您只能将此代码作为一种指导,因为它尚未经过测试,甚至也未进行编译。代码示例 1 StringBuffer criteria = new StringBuffer();for (int i=0; i numberOfParameters; i+) if (i = 0 ) criteria.append ( WHERE TRAVEL.TRIP.PERSONID IN ( ?, );else if (i = (numberOfParameters-1) criteria.append ( ? ) );elsecriteria.append ( ?, );String designTimeQuery = new String (SELECT ALL TRAVEL.TRIP.TRIPID, +TRAVEL.TRIP.PERSONID, +TRAVEL.TRIP.DEPDATE, +TRAVEL.TRIP.DEPCITY, +TRAVEL.TRIP.DESTCITY, +TRAVEL.TRIP.TRIPTYPEID +FROM TRAVEL.TRIP ); / save this constant valueString runTimeQuery = new String (designTimeQuery + criteria.toString() );try getSessionBean1().getMyRowSet().setCommand(runTimeQuery);/ note the index has to start with 1for (int i=1; i= numberOfParameters; i+) getSessionBean1().getMyRowSet().setObject (i, yourParameteri-1);getSessionBean1().getMyRowSet().execute(); catch (Exception e) / Send the error to a Message Component on the web page renderederror(Error while Executing Query with Parameters:+e.getMessage();技术文章 Sun Java Studio Creator 2 查询编辑器包含了有关查询编辑器的详细信息。教程执行插入、更新和删除操作还包含了其他的相关信息。最后,下面资源包含了有关 Java 数据库编程的详

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论