论文导读:我们知道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对象持久化技术详解. 北京:电子工业出版社
|