WebLogic Workshop 8.1专栏 从数据库控件返回

标题:WebLogic Workshop 8.1专栏 从数据库控件返回XMLBeans 浏览次数: 916 时间:2004-03-03
作者:Steve Hanson

服务,因为SOAPIterator层之前这些数据对象总是被关闭掉。

要想学习从数据库控件返回XMLBeans 的更多内容, 下载本文附带的补充资源(1.69 MB)。

那么,哪种数据类型能够被Web组件同时广泛使用呢?有两种数据类型符合要求:自定义JavaXMLBeans。下面这篇文章向你展示了如何创建能够提供XMLBeans类型数据的数据库控件。把数据库数据转换成XMLBeans有两个主要优点:(1)XMLBeans可被所有Workshop组件使用;(2)XMLBeans格式的数据非常灵活而且易于处理。

我将从解释XMLBeans是什么开始,接着描述如何创建可向客户端返回XMLBeans类型的数据库控件。注意,有一个名叫XMLBeans_DatabaseControl的伙伴示例项目。此伙伴项目包含可返回XMLBeans数据类型的示例数据库控件。

XMLBean 是什么?

XMLBean是一个附带Java API的XML文档。此API用于在XML文档中解析和操作数据。典型的XMLBean可以用以下形式表示数据库数据。

<!DOCTYPE XCustomer>

<XCustomer xmlns="java:///database/customer_db"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <XCustomerRow>

        <CUSTID>1</CUSTID>

        <NAME>Fred Williams</NAME>

        <ADDRESS>123 Slugger Circle</ADDRESS>

    </XCustomerRow>

    <XCustomerRow>

        <CUSTID>2</CUSTID>

        <NAME>Marnie Smithers</NAME>

        <ADDRESS>5 Hitchcock Lane</ADDRESS>

    </XCustomerRow>

    <XCustomerRow>

        <CUSTID>3</CUSTID>

        <NAME>Bill Walton</NAME>

        <ADDRESS>655 Tall Timbers Road</ADDRESS>

    </XCustomerRow>

</XCustomer>

 

XMLBeanAPI,假定表示上述文档中Fred Williams。

String name = custBean.getXCustomer().getXCustomerRowArray(1).getNAME();

更新数据库控件以返回XMLBean而不是返回RowSetResultSetIterator并没有什么限制。这不是ResultSetIterator层类(Web格式的数据也非常容易操作,API

schema

使用XMLBean类的第一步是从可生成的XMLBean类创建一个schema。为数据库控件创建的schema必须能够对从数据库返回的各种数据进行建模。

如果你在编写自己的schema ,至少,schema 的元素应具有与数据库中的字段相同的名称,这允许从数据库返回的数据能够自动映射到XMLBean

要为数据库或RowSet控件自动生成schema ,可遵照以下过程。

1.  Design View中显示数据库控件文件。

2.  选择一种从数据库返回数据的方法(不返回数据的方法,比如CREATE TABLE语句,将无法工作。)

3.  选项卡中标有sql的属性。

4.  的一部分,并且将从这个schema 派生出XMLBeanEditor RowSet Schema文本(该对话框不支持鼠标的右击操作,你必须用Ctrl+C来复制schema 注意,Xcustomer中的两个位置处:

<xsd:element name=”XCustomer”…

<xsd:element name=”XCustomerRow”>

6.  文本保存到Schemas文件中。务必确保此XSD开始。

文件时,生成的XMLBean类型可用数据库控件中的方法来返回。XMLBean类将显示在Schema项目的XML Bean Classes文件夹内。

编辑schema 以创建新的“Document”类型

注意,仅有一种生成的类型是"Document"XMLBean类型:XcustomerDocument。其它的类型,XCustomerDocument.XCustomer 和 XCustomerDocument.XCustomer.XcustomerRow,只能用来引用"Document"类型。这个区别尤其重要,因为只有"Document"类型才有资格直接参到业务流程中,或者被传送到Web服务。出于这个原因,你可能希望修改你的schema 使其纳入"文档"类型,以便和schema 中的其他类型对应,特别是在你拥有一个非常庞大的schema ,该schema 带有根据单个的"Document"类型定义的多个嵌套类型时,更是如此。

要为给某些元素生成一个新的Document类型,移动这个元素以便使其成为schema 中的顶层元素。在下面的示例中,XcustomerRow元素被移到了方案的顶层:它的初始位置已经被一个引用元素:<xsd:element ref="XCustomerRow"/>所代替。

<?xml version="1.0" encoding="UTF-8"?>

<xsd:schema targetNamespace="java:///database/customer_db"

xmlns="java:///database/customer_db"

xmlns:xsd="http://www.w3.org/2001/XMLSchema"

xmlns:wld="http://www.bea.com/2002/10/weblogicdata"

elementFormDefault="qualified" attributeFormDefault="unqualified">

    <xsd:element name="XCustomer"

        wld:DefaultNamespace="java:///database/customer_db" wld:RowSet="true">

     <xsd:complexType>

      <xsd:choice maxOccurs="unbounded">

       <xsd:element ref="XCustomerRow"/>

      </xsd:choice>

     </xsd:complexType>

    </xsd:element>

    <xsd:element name="XCustomerRow">

      <xsd:complexType>

        <xsd:sequence>

  <xsd:element name="CUSTID" type="xsd:int" wld:JDBCType="INTEGER"

         minOccurs="0" wld:TableName="WEBLOGIC.CUSTOMER" nillable="true">

         </xsd:element>

  <xsd:element name="NAME" type="xsd:string" wld:JDBCType="VARCHAR"

         minOccurs="0" wld:TableName="WEBLOGIC.CUSTOMER" nillable="true">

         </xsd:element>

  <xsd:element name="ADDRESS" type="xsd:string" wld:JDBCType="VARCHAR"

         minOccurs="0" wld:TableName="WEBLOGIC.CUSTOMER" nillable="true">

         </xsd:element>

  <xsd:element name="CITY" type="xsd:string" wld:JDBCType="VARCHAR"

         minOccurs="0" wld:TableName="WEBLOGIC.CUSTOMER" nillable="true">

         </xsd:element>

  <xsd:element name="STATE" type="xsd:string" wld:JDBCType="CHAR"

         minOccurs="0" wld:TableName="WEBLOGIC.CUSTOMER" nillable="true">

         </xsd:element>

          <xsd:element name="ZIP" type="xsd:string" wld:JDBCType="VARCHAR"

         minOccurs="0" wld:TableName="WEBLOGIC.CUSTOMER" nillable="true">

         </xsd:element>

  <xsd:element name="AREA_CODE" type="xsd:string" wld:JDBCType="CHAR"

         minOccurs="0" wld:TableName="WEBLOGIC.CUSTOMER" nillable="true">

         </xsd:element>

  <xsd:element name="PHONE" type="xsd:string" wld:JDBCType="CHAR"

         minOccurs="0" wld:TableName="WEBLOGIC.CUSTOMER" nillable="true">

         </xsd:element>

        </xsd:sequence>

        <xsd:anyAttribute namespace="http://www.bea.com/2002/10/weblogicdata"

        processContents="skip"></xsd:anyAttribute>

      </xsd:complexType>

    </xsd:element>

</xsd:schema>

 

文档XCustomerDocument XMLBean类型

一旦你生成了用于模拟数据库数据的XMLBean类型,你就能将这些类型导入到你的数据库控件中。

    import databaseCustomerDb.XCustomerDocument;

    import databaseCustomerDb.XCustomerDocument.XCustomer;

    import databaseCustomerDb.XCustomerDocument.Factory;

XMLBean类型能够从控件的方法中返回。

    /**

     * @jc:sql statement="SELECT custid, name, address FROM customer"

     */

     public XCustomerDocument findAllCustomersDoc();

从查询中返回的数据将自动映射到XMLBean中,因为数据库字段的名称和XMLBean的字段匹配。

相关主题

· Java Types Generated from User-Derived Schema Types

· @jc:sqlAnnotation

posted on 2004-11-15 22:50  笨笨  阅读(1061)  评论(0编辑  收藏  举报

导航