| 论文导读:我们知道XML和数据库的通信技术有三种。Java技术在实现这些技术方面具有不可替代的地位。利用Servlet能够实现XML和数据库的通信。关键词:XML,Java,数据库
 
 引言:我们知道XML和数据库的通信技术有三种。Java技术在实现这些技术方面具有不可替代的地位。下面来简单讨论一下三种技术的具体实现,每一部分讲解一种技术的实现。 一、通过Java Servlet实现XML文档和数据库通信技术-DOM API 对 Java 程序员来说,Servlet 和 XML 是最令人振奋的两项技术。利用Servlet能够实现XML和数据库的通信,而且利用Servlet还能构造XML文档。 1.用Java Servlet 实现XML数据存储到数据库。 (1)利用Java Servlet 构建XML 文档 构建XML文档数据,可以是从客户传过来的Http参数,这是因为很多的商务系统就是在客户端不断的为用户呈现、接收、发送数据,见附录A[1]代码。 (2)解析XML文档,把数据存到数据库 我们可以用现在已有的一些DOM API,在解析XML文档时,在内存中已经存在了一个DOM树。也可以自己编写DOM树,生成一个DOM树,然后可以对这棵DOM树进行分析,不断的把这些信息存到数据库。 2.用Java Servlet 实现把数据库中的数据生成XML文档 把从数据库查询出来的数据生成XML文档,见附录A[2]代码。 二、利用Java环境实现XML和数据库通信技术-对象-关系映射(ORM) 在Java环境下,有多种对象关系映射方法,如实体Bean、OJB、JDO、JDBC等。Hibernate是一种新的O/R映射工具,它不仅提供了从Java类到数据表的映射,也提供了数据查询和恢复等机制。它能和多种Web服务器或者应用服务器良好集成,如今已经支持几乎所有的流行的数据库服务器。这几种方法都是有共性的,我们就以其中Hibernate为例,来具体的说明这种技术的实现方法[24]。 具体的实现如下: 1.配置Hibernate(一次即可) Hibernate的真正运行需要一个服务器,所以首先要把Hibernate部署在服务器中。安装服务器,然后安装Hibernate的运行环境(主要是一些Jar包)。下载JDBC的驱动程序。建立Hibernate的应用目录Hibernate。把Hibernate2.jar及第三方的运行库放到Hibernate目录的Lib目录中。配置服务器的服务配置文件server.xml,主要是关于Hibernate的Web应用及数据源。然后再配置Hibernate的配置描述符,一般是XML文件,起名为hibernate.cfg.xml。 2.确定数据表 就是在对象-关系映射中和类对应的数据库表。我们使用hibernate来封装数据表,利用数据库脚本创建数据库表。 3.书写数据库表映射的类 根据映射的原理,写和数据库表对应的类。论文参考网。 4.书写对象-关系的映射描述 它是作为XML和数据库之间映射的中间件。对于Hibernate来说就是利用一个XML文件,在这个映射文件中,指定了要映射的类和映射的表,并且指定了表的各个字段和Java对象中各个字段的映射关系。 5.指定这种映射关系 在Hibernate的配置描述符hibernate.cfg.XML中指定这种映射关系。方法如下: 〈session-factory> <mapping source=”???” ></mapping-file>//???代表映射描述的源文件的 //名称 </session-factory> 6.编写业务逻辑 上面的5个步骤已经实现了对象-关系的映射。怎么利用这种技术为web应用服务。论文参考网。方法如下: 先生成一个sessionFactory的会话工厂,以用作会话。然后开始一个会话和一个事务。当对数据库进行增(save(object))删(delete(course))查(createQuery(queryString))改操作,操作完成之后,再把会话和事务结束。不需要书写任何的数据库连接,就可以进行操作。 三、利用Java语言实现XML文档作为一个对象存储在数据库的技术 这一种方法比较简单,具体的实现如下: 创建XML文档 1.把XML文档中的标签“<>”替换成“<>” 这时候XML就是一个纯粹的字符串,接下来就是把处理过的字符串存储在数据库的一个字段里。 当需要把这个XML文档发送到客户端时,需要下面的操作: 2.从数据库中把这个字段的值查询出来 3.对这个字符串进行处理 把字符串中的字符“<”和“>”替换成“<”和“>”。这时候字符串又重恢复成一个XML文档,就可以直接的发送到客户端进行显示。具体的代码见附录B。 四、比较几种技术实现的优缺点 1.利用DOMAPI技术实现XML数据存储在数据库中。这一种方法,是现在比较流行,很多企业正在采用的方法,所以技术比较成熟,运行效率比较高。但是DOM树必须在内存中建立语法树,所以比较占内存。 2.第二种方法不仅提供了从Java类到数据表之间的映射,也提供了数据查询和恢复机制。相对于第一种方法来说,少了很多操作数据库的工作量。论文参考网。但是它还不是一种成熟的技术,所以在国内的企业系统用的比较少。 3.第三种方法是最简单的方法。但是有一点,如果XML文档过大的话,会出现超出字段长度限制的错误。 不管怎么样,随着时代的发展,随着用户需求的不断增多,XML和数据库通信的技术会不断的完善,会出现更多的解决方案。期待美好的未来。 附录A 利用JavaServlet实现DOM技术的代码 1.public void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType('text/XML'); PrintWriter out = response.getWriter(); Enumeration keys; String key; String requestedSubtree = ''; keys= request.getParameterNames(); while (keys.hasMoreElements()) { key = (String) keys.nextElement(); if (key.equalsIgnoreCase('subtree')) requestedSubtree = request.getParameter(key); } 2. // 我们在此处对 SQL 语句进行硬编码;如果根据用户输入 // 限制查询,则情况会更为复杂。 String query = 'selectorder from ' + DbOwner + '.sales_order_view'; res.setContentType('text/XML'); try { ConInfo index = new ConInfo(); Connection con =getCon(index); Statement stmt =con.createStatement(); ResultSet rs =stmt.executeQuery(query); ... // 显示结果集。我们从每行取出 XML 文档, // 对其进行分析,然后打印DOM 树。当没有更多的行时,rs.next() 返回 // false。 while (rs.next()) { String nextOrder = rs.getString(1).trim(); Document doc = null; StringReader sr = new StringReader(nextOrder); InputSource iSrc = new InputSource(sr); try { parser.parse(iSrc); doc = parser.getDocument(); } catch (Exception e) { System.err.println('Sorry, anerror occurred: ' + e); } 参考书籍: [1] Brett McLauqhlin. Java 和XML. 北京:中国电力出版社,2001:78-79 [2] Britt McLaughlin.Java 和XML. O’Reilly,2001 [3] Nicholas Chase.使用JDBC将数据抽取到XML文档.http://down.xml.org.cn/resour ce/tutorial/ibm/x-extract/index.html [4] Doug Tidwell. Servlet 和XML:互为补充.IBM的职员网络文章,2000:14-17 [5] Tom Myers. java XML 编程指南.北京:电子工业出版社,2003:200-203 [6] 孙卫琴. 精通Hibernate:java对象持久化技术详解. 北京:电子工业出版社     |