??xml version="1.0" encoding="utf-8" standalone="yes"?>成人毛片视频在线观看,久久久久高潮毛片免费全部播放,欧美在线3区http://www.aygfsteel.com/hengheng123456789/category/14829.htmlzh-cnTue, 27 Feb 2007 17:18:23 GMTTue, 27 Feb 2007 17:18:23 GMT60使用Java和XML-DBMS数据库桥接到XMLhttp://www.aygfsteel.com/hengheng123456789/articles/67546.html哼哼哼哼Mon, 04 Sep 2006 03:40:00 GMThttp://www.aygfsteel.com/hengheng123456789/articles/67546.htmlhttp://www.aygfsteel.com/hengheng123456789/comments/67546.htmlhttp://www.aygfsteel.com/hengheng123456789/articles/67546.html#Feedback0http://www.aygfsteel.com/hengheng123456789/comments/commentRss/67546.htmlhttp://www.aygfsteel.com/hengheng123456789/services/trackbacks/67546.html ~写映射文g

映射文g是一个特D的XML文gQ用户在其中指定XML元素、属性(attributesQ以?qing)PCDATA如何映射到数据库的表与列?a >清单A是q个XMLCZ的映文Ӟ清单B? 数据库的一个SQL架构。在清单A中,Options元素包含pȝҎ(gu)的一些参数。在q例子中Q你要设|相应的格式Q以实现DATEcd的数据库字段? XML数据的相互{换。注意,Pattern属性必遵循java.text.SimpleDateFormat模式规范?/p>

清单A:

Listing A
<?xml version='1.0' ?>

<XMLToDBMS Version="2.0" xmlns="http://www.xmlmiddleware.org/xmldbms/v2">

<Options>

<SimpleDateFormat Pattern="yyyy-MM-dd" DefaultForTypes="DATE" />

</Options>

<Databases>

<Database Name="Default">

<Catalog>

<Schema>

<Table Name="users">

<Column Name="user_id" DataType="VARCHAR" Length="24" Nullable="No"/>

<Column Name="company" DataType="VARCHAR" Length="255" Nullable="No"/>

<PrimaryKeyKeyGenerator="UID">

<UseColumn Name="user_id"/>

</PrimaryKey>

</Table>

<Table Name="orders">

<Column Name="order_id" DataType="VARCHAR" Length="24" Nullable="No"/>

<Column Name="user_id" DataType="VARCHAR" Length="24" Nullable="No"/>

<Column Name="posted_at" DataType="DATE" Nullable="No"/>

<Column Name="type" DataType="INTEGER" Nullable="Yes"/>

<ForeignKey Name="order_to_user_FK">

<UseTable Name="users" />

<UseUniqueKey Name="PrimaryKey" />

<UseColumn Name="user_id"/>

</ForeignKey>

<PrimaryKeyKeyGenerator="UID">

<UseColumn Name="order_id"/>

</PrimaryKey>

</Table>

<Table Name="cargos">

<Column Name="cargo_id" DataType="VARCHAR" Length="24" Nullable="No"/>

<Column Name="order_id" DataType="VARCHAR" Length="24" Nullable="No"/>

<Column Name="title" DataType="VARCHAR" Length="255" Nullable="Yes"/>

<Column Name="code" DataType="VARCHAR" Length="255" Nullable="Yes"/>

<Column Name="quantity" DataType="INTEGER" Nullable="Yes"/>

<Column Name="weight" DataType="INTEGER" Nullable="Yes"/>

<Column Name="danger" DataType="VARCHAR" Length="255" Nullable="Yes"/>

<PrimaryKeyKeyGenerator="UID">

<UseColumn Name="cargo_id"/>

</PrimaryKey>

<ForeignKey Name="cargo_to_order_FK">

<UseTable Name="orders" />

<UseUniqueKey Name="PrimaryKey" />

<UseColumn Name="order_id"/>

</ForeignKey>

</Table>

</Schema>

</Catalog>

</Database>

</Databases>

<Maps>

<ClassMap>

<ElementType Name="order"/>

<ToClassTable Name="orders"/>

<PropertyMap>

<ElementType Name="order_id"/>

<ToColumn Name="order_id"/>

</PropertyMap>

<PropertyMap>

<ElementType Name="user_id"/>

<ToColumn Name="user_id"/>

</PropertyMap>

<PropertyMap>

<ElementType Name="posted_at"/>

<ToColumn Name="posted_at"/>

</PropertyMap>

<PropertyMap>

<ElementType Name="type"/>

<ToColumn Name="type"/>

</PropertyMap>

<RelatedClassKeyInParentTable="Unique">

<ElementType Name="cargo"/>

<UseUniqueKey Name="PrimaryKey"/>

<UseForeignKey Name="cargo_to_order_FK"/>

</RelatedClass>

</ClassMap>

<ClassMap>

<ElementType Name="cargo"/>

<ToClassTable Name="cargos"/>

<PropertyMap>

<ElementType Name="cargo_id"/>

<ToColumn Name="cargo_id"/>

</PropertyMap>

<PropertyMap>

<ElementType Name="order_id"/>

<ToColumn Name="order_id"/>

</PropertyMap>

<PropertyMap>

<ElementType Name="title"/>

<ToColumn Name="title"/>

</PropertyMap>

<PropertyMap>

<ElementType Name="code"/>

<ToColumn Name="code"/>

</PropertyMap>

<PropertyMap>

<ElementType Name="quantity"/>

<ToColumn Name="quantity"/>

</PropertyMap>

<PropertyMap>

<ElementType Name="weight"/>

<ToColumn Name="weight"/>

</PropertyMap>

<PropertyMap>

<ElementType Name="danger"/>

<ToColumn Name="danger"/>

</PropertyMap>

</ClassMap>

</Maps>

</XMLToDBMS>
清单B:
Listing B
CREATE TABLE XMLDBMSKey (
HighKeyint(11)
);
CREATE TABLE orders (
order_idvarchar(24) DEFAULT '' NOT NULL,
user_idvarchar(24) DEFAULT '' NOT NULL,
posted_atdate,
type integer,
PRIMARY KEY (order_id)
);
CREATE TABLE cargos (
cargo_idvarchar(24) DEFAULT '' NOT NULL,
order_idvarchar(24) DEFAULT '' NOT NULL,
title varchar(255),
code varchar(255),
quantity integer,
weight integer,
danger varchar(255),
PRIMARY KEY (cargo_id)
);


清单A的Databases元素包含数据库的一个关pL构。该构架保XML-DBMS能正地映射数据q编译映文Ӟ如果要在多个映射文g中用相同的数据库架构,最好的办法是在每个文件中架构作Z个XML外部实体来包容,不必每次都进行重写)(j)?/p>

数据库名U“Default”意味着数据库必dJDBCq接URL中显式地指定。必d每个表中提供主键信息Q而且每个键都必须存在于数据库中。否则,~译器可能报告一个映异常?/p>

在KeyGenerator中,你需要提供主键生成器的名Uͼ同时必须用一个独立的JavacL实现q个生成器。KeyGenerator是Java接口的一个实玎ͼ每次执行一个INSERT操作Ӟ它都?x)生成一个惟一的键倹{也可用一个简单的、现成的生成器?/p>

图B的XMLDBMSKey表包含了(jin)由KeyGenerator使用的倹{UseColumn元素指向一个充当主键的元素Qƈ告诉E序在哪里写生成 的键倹{除非Name属性明指定了(jin)一个名Uͼ否则主键?x)隐式地采用PrimaryKeyq一默认名称。主键可能同时用了(jin)多列Q? KeyGenerator的实现必ȝ道它应该生成多少个键?/p>

清单A的ForeignKey元素用于描述元素cM间的主键–外键关pR?/p>

在映文件中Q最重要的一部分是Maps节。元素类型及(qing)其内定w常被视Z个类Qƈ映射C个表。这是通过一个ClassMap元素?qing)其子元? 来完成的。子元素包括ElementTypeQ其中含有要映射的元素的名称Q以?qing)ToClassTableQ它指定元素要映到哪个表?/p>

PropertyMap元素能控制“简单”(子节点中的PCDATAQ元素或属性(attributeQ映——虽然在q个例子中,应用E序映射? 只是元素。RelatedClass元素允许我们在此装另一个元素类Q但那个cdd另一个ClassMap元素中得到定义?/p>

映射文档~译成XMLDBMap Java对象Q最l的l果?x)传lDBMSToDOM、DOMToDBMS或者DBMSDelete对象。这些特D对象负责与选择、插入、更新或删除数据有关的全部工作?/p>

~写qo(h)器和动作文g

qo(h)器文档由一pdqo(h)器构成,q些qo(h)器应用于数据库中的倹{这样一来,qo(h)器就能过滤由SELECT操作(g)索的行或者由DELETE操作删除? 行。过滤器语言位于映射语言的顶端。换a之,qo(h)器文档允怽指定数据的检索条Ӟ而映语a提供l构化信息(也就是联接–joinQ。你可认为映语a 和过滤器语言合ƈ在一P共同为数据库提供?jin)一套简单的查询语言Q它保l果以XML的Ş式返回。过滤器文档要编译成FilterSet Java对象Q最l的对象?x)传lDBMSToDOM或者DBMSDelete对象?/p>

动作文档׃pd动作构成Q这些动作要应用于XML文档中的倹{你需要ؓ(f)作ؓ(f)cL映射的元素类型指定相应的动作。这些动作会(x)转换为对行的插入、更? ?qing)删除操作。在一个动作文档中Q如果已l规定特定的行需要插入或更新Q就不能再规定那些行需要删除;反之亦然。如果一个动作文档规定某些行需要插入或? 斎ͼ׃(x)由DOMToDBMS对象来用那些文档。相反,如果规定某些行需要删除,则会(x)由DBMSDelete对象来用?/p>

Listing C

Q?xmlversion='1.0' ?Q?br />QActions Version="2.0" xmlns="http://www.xmlmiddleware.org/xmldbms/actions/v2"Q?br />QDefaultActionQ?br />QNone /Q?br />Q?DefaultActionQ?br />QActionQ?br />QElementType Name="order" /Q?br />QUpdateOrInsert /Q?br />Q?ActionQ?br />QActionQ?br />QElementType Name="cargo" /Q?br />QUpdateOrInsert /Q?br />Q?ActionQ?br />Q?ActionsQ?/p>

清单C演示?jin)插?更新动作。这D代码会(x)使用一个已知的主键Q如果存在的话)(j)来更C个行Q或者生成一个新的主键(如果不存在的话)(j)。实际上Q你需要ؓ(f)两个c(order和cargoQ插入元素,因ؓ(f)cargo元素嵌套在order元素中?/p>

Listing D

Q?xmlversion='1.0' ?Q?br />QFilterSet Version="2.0" xmlns="http://www.xmlmiddleware.org/xmldbms/filters/v2"Q?br />QOptionsQ?br />QWrapper Name="orders" /Q?br />Q?OptionsQ?br />QFiltersQ?br />QFilterQ?br />QRootFilterQ?br />QTable Name="orders" /Q?br />QWhere Condition=" user_id = 'UID745632' "/Q?br />Q?RootFilterQ?br />Q?FilterQ?br />Q?FiltersQ?br />Q?FilterSetQ?/p>

选择或删除数据时Q需要用包含在清单D中的qo(h)器文件。Options元素包含一个特D的Wrapper元素Q它用于包装查询l果。如果会(x)从数? 库中(g)索多个元素,需要用Wrapper元素。在q种情况下,生成的是含有多个根元素的XMLl构Q现行的许多标准都不支持它?/p>

RootFilterelements用于指定从根表检索到的倹{?/p>

~写Java代码

现在Q我们已准备好编写自q应用E序Q它?yu)在一个关pL据库中存储和(g)索DOM文档。清单E包含?jin)示范性的Java代码Q它有必要进一步说明?/p>

Listing E

package test.xmldbms;
importorg.xmlmiddleware.db.*;
import org.xmlmiddleware.utils.XMLMiddlewareException;
importorg.xmlmiddleware.xmldbms.*;
importorg.xmlmiddleware.xmldbms.tools.*;
importorg.xmlmiddleware.xmldbms.actions.*;
importorg.xmlmiddleware.xmldbms.datahandlers.*;
importorg.xmlmiddleware.xmldbms.filters.*;
importorg.xmlmiddleware.xmldbms.keygenerators.*;
importorg.xmlmiddleware.xmldbms.maps.*;
importorg.xmlmiddleware.xmlutils.*;
importorg.xml.sax.*;
import org.w3c.dom.*;
importjava.io.*;
importjava.util.*;
public class XMLToDBMSAndViceVersa
{
// Service objects
private DOMToDBMSdomToDBMS = null;
private DBMSToDOMdbmsToDOM = null;
private DBMSDeletedbmsDelete = null;
// Credentials for connecting to database
private static String JDBC_DRIVER = "org.gjt.mm.mysql.Driver";
private static String JDBC_URL = "jdbc:mysql://localhost/dbname";
private static String JDBC_DBNAME = "dbname";
private static String JDBC_USER = "dbuser";
private static String JDBC_PASSWORD = "dbpassword";
// Some file names
private static String mapFilename = "Listing-A.map";
private static String actionFilename = "Listing-C.act";
private static String filterFilename = "Listing-D.act";
// Datahandler class
private static String GENERICHANDLER = "org.xmlmiddleware.xmldbms.datahandlers.GenericHandler";
// Key generation class
private static String KEYGENERATOR = "org.xmlmiddleware.xmldbms.keygenerators.KeyGenerator";
// Parser utils class; XML-DBMS does not yet support JAXP, so such operations as XML parsing and serializing
// needs to be a little customized for each parser. this is the class for supporting Xerces parser.
private static String PARSERUTILSCLASS = "org.xmlmiddleware.xmlutils.external.ParserUtilsXerces";
private static boolean VALIDATING_PARSER = false;
public static void main(String [] args) {
// Tell the JVM to run finalizers on exit. This is necessary to ensure
// that database connections are properly closed.
System.runFinalizersOnExit(true);
// Creating parser utilities
ParserUtilsutils = (ParserUtils)Class.forName(PARSERUTILSCLASS).newInstance();
// Creating a data source and data handler.
DataSourcedataSource = new JDBC1DataSource(JDBC_DRIVER, JDBC_URL);
dataHandler = (DataHandler)Class.forName(GENERICHANDLER).newInstance();
dataHandler.initialize(dataSource, JDBC_USER, JDBC_PASSWORD);
// Compiling and instantiating a Map object
MapCompiler compiler = new MapCompiler(utils.getXMLReader(VALIDATING_PARSER));
XMLDBMSMap map = compiler.compile(new InputSource(new FileReader(mapFilename)));
// Create an object containing information needed to transfer data
TransferInfotransferInfo = new TransferInfo(map);
transferInfo.addDataHandler(JDBC_DBNAME, dataHandler);
// Compiling and instantiating an Action object
ActionCompiler compiler = new ActionCompiler(utils.getXMLReader(VALIDATING_PARSE));
Actions actions = compiler.compile(map, new InputSource(new FileReader(actionFilename)));
// Creating and configuring service object
domToDBMS = new DOMToDBMS();
domToDBMS.setCommitMode(DataHandler.COMMIT_AFTERSTATEMENT);
domToDBMS.stopOnException(true);
domToDBMS.setFilterSetReturned(false);
KeyGeneratorkeyGen = (KeyGenerator)Class.forName(KEYGENERATOR).newInstance();
domToDBMS.addKeyGenerator("UID", keyGen); // Adding used in Listing-A key generator named UID
// Getting our XML document into DOM document
Document doc = utils.openDocument(new InputSource(new StringReader(xmlString)),VALIDATING_PARSER);
// Ooops... and our XML file is already in the database!
domToDBMS.storeDocument(transferInfo, doc, actions);
// Creating FilterSet object for retrieving data
FilterCompiler compiler = new FilterCompiler(utils.getXMLReader(validate));
FilterSetfilterSet = compiler.compile(map, new InputSource(new FileReader(filterFilename)));
// Creating and configuring another service object
dbmsToDOM = new DBMSToDOM(utils);
dbmsToDOM.setDTDInfo(null, null);
Hashtableparams = new Hashtable();
// And now we are getting a DOM document from database
doc = dbmsToDOM.retrieveDocument(transferInfo, filterSet, params, null);
}
}

首先Q你必须实例化一个数据源和一个数据处理程序。JDBC1DataSourcecLJDBC 2.0 DataSource的一个实玎ͼ它用于一个遵循JDBC1标准的驱动程序,而且提供?jin)对q接池的支持。Datahandler是用于对数据库访问进行抽 象的一个接口。你q要指示JVM在退出时q行l结器(finalizersQ,q是用System.runFinalizersOnExit(true) 来实现的。终l器必须q行Q否则无法保证数据库q接正确关闭。ParserUtils是实C(jin)解析器特有方法的一个类的接口。之所以需要它Q是因ؓ(f)XML 解析和序列化操作需要针Ҏ(gu)一个解析器q行许定制?/p>

你必ȝ译和实例化一个Map对象、Actions对象以及(qing)FilterSet对象Q它们全都会(x)在文档{换过E中使用。ؓ(f)此,你需要用由 MapCompiler、ActionCompiler和FilterCompiler{对象提供的相应的方法。TransferInfo对象包含? XML文档和数据库之间传输数据所需的信息。它?yu)装了(jin)根据一个特定的映射Q在XML文档和数据库之间传输数据所需的映元数据以及(qing)DataHandler 对象。它为每个数据库都包含单独一个XMLDBMSMap对象和一个DataHandler对象。你q必dZ个KeyGenerator实现对象Q以 便在插入新对象时生成主键。键用于联接不同的表Q从c表到类表,或者从c表到属性表Q,q用于从根表Qroot tablesQ检索数据?/p>

最后,你可创徏一个DOMToDBMS对象Q以便将数据从一个DOM?wi)传输到数据库。采取类似的方式Q还可创Z个DBMSToDOM对象Q以便将关系数据传回DOM?/p>

ȝ

本文证明使用XML-DBMS来存储XML数据其实q不难。如果你已经建立?jin)一个关pL据库基础l构Q或者希望徏立一个独立于数据库厂商的基础l? 构,推荐采取这U方式。由于XML-DBMS不要求Q何特定的数据库,所以你的数据库只需理解标准SQLQ而且有一个JDBC驱动E序Q或者具有桥接机 制的一? ODBC驱动E序Q就可以?jin)。如果你的应用程序需要搜索或者合q来自不同类型的数据源的信息Q就适合使用q个框架Q因为关pL据库架构很容易通过XML DTD和XML架构来徏立,另外q有大量工具可将DTD和架构{换成映射文g。另外,q可用它生成由数据驱动的应用E序Q比如一个CMS或者CRMpȝ? XML-DBMS是从XML到DBMS的中间g产品的一个典范,能有效地整合支持和不支持XML的系l?/p>





哼哼 2006-09-04 11:40 发表评论
]]>
վ֩ģ壺 ͡| Ͼ| ԭ| | | «| ʯ| | ԭƽ| Ϻӿ| ͨ| º| | ˴| | | | ̨ɽ| ˳| ̩| | | | | | | ƽ| ɾ| | Զ| | | ®| ƽ| غ| | | üɽ| | | |