使用JDBC4.0操作XML类型的字段(保存获取xml数据)的方法
作者:excalimax 发布时间:2021-08-25 17:44:38
在 Java SE 6 所提供的诸多新特性和改进中,值得一提的是为 Java 程序提供数据库访问机制的 JDBC 版本升级到了 4.0, 这个以 JSR-221 为代号的版本 , 提供了更加便利的代码编写机制及柔性 , 并且支持更多的数据类型 .
JDBC 4.0 的新特性分为下述四类:
1. 驱动及连接管理
2. 异常处理
3. 数据类型支持
4. API 的变化
以上说这么都不是本文要讲的重点内容,下面给大家介绍jdbc4.0操作xml类型数据的方法,具体详情如下所示:
在JDBC4.0推出后,它的从多的特性正在受到广泛地关注。而最重要的更新就是支持XML数据类型(在最新的SQL2003标准中定义了这种数据类型),当然,将XML数据保存在数据库中,并在应用程序中更新XML数据并不是什么新技术。但这是JDBC第一次提供了一个映射接口(java.sql.SQLXML),并利用这个接口来支持SQL/XML数据类型。当然,为了满足处理XML数据类型的需要,其他的接口,如java.sql.Connection和java.sql.ResultSet,也被更新了。
在SQL2003标准和XML数据类型推出之前,开发人员必须将XML数据保存在BLOB、CLOB或TEXT类型字段中。现在,很多主流的数据库(如SQL Server、Oracle和DB2)已经加入了对XML数据类型的支持。但在JDBC4以前,Java应用程序仍然必须将数据库中的XML数据类型转换为JDBC支持的数据类型。但新的JDBC可以通过本地的接口来绑定XML,因此,在处理任何数据库中的XML数据变得更容易和高效。
在本文中将介绍如何用JDBC4.0来操作XML类型的字段(保存和获得XML数据),并给出了一个例子供读者参考。
一、存储和获得XML数据
为了将XML数据保存在一个XML类型的字段中,我们首先应该调用java.sql.Connection.createSQLXML()方法。这个方法返回了一个java.sql.SQLXML的实例。然后我们可以通过调用setOutputStream(), setCharacterStream()或简单地调用setString(String xml)来将XML数据加到SQLXML对象中。要注意的这个功能非常类似于BLOB和CLOB类型的使用。
JDBC4.0的关键特性之一就是我们还可以通过调用java.sql.SQLXML的setResult(Class resultClass)方法来获得一个设置avax.xml.transform.Result的类的实现。这些类包括DOMResult, JAXBResult以及SAXResult。换句话说,我们无需转换就可以简单地做以下事情:
1. 得到XML数据
2. 建立一个独立的DOMResult对象
3. 将DOMResult传入java.sql.SQLXML对象
4. 直接通过java.sql.Statement将XML数据保存到响应数据库字段中
为了java.sql.ResultSet获得SQLXML类型数据,我们只需要地调用getSQLXML,并指定相应地字段名或索引即可。然后我们可以通过getBinaryStream(), getCharacterStream()或getString()从java.io.InputStream中获得实际的XML数据,或是一个简单的字符串。保存XML数据也获得XML数据的过程类似,我们还可以通过调用SQLXML对象实例的getSource(Class sourceClass)方法来获得XML源,因此,我们可以从任何实现javax.xml.transform.Source的类访问XML数据。
二、实例程序
由于JDBC4是在2006年12月11日由官方发布的(随J2SE6.0发布),因此,现在很多数据库驱动对JDBC4支持的还不是很好。在本例子中使用了Apache Derby数据库的较版本10.2来讨论对XML类型数据的保存和获取。Derby的这个版本还不持java.sql.SQLXML,这就意味着我们不能直接从结果值中获得XML数据,以及绑定XML数据。但Derby和SQL 2003兼容,可以常非容易地使用嵌入模式,类此,它仍然可以为我们演示如何操作XML数据,就好象在使用一个完全支持JDBC4的驱动一样。用于操作Derby的XML数据的代码如下:
import java.io.StringReader;
import java.sql.*;
public class XmlDbTester
{
static final String XML1 =
"<article>"+
"<title>First Article</title>"+
"<author>John Smith</author>"+
"<body>A very short article.</body>"+
"</article>";
static final String XML2 =
"<article>"+
"<title>Second Article</title>"+
"<author>Mary Jones</author>"+
"<body>Another short article.</body>"+
"</article>";
static final String XML3 =
"<article>"+
"<title>Third Article</title>"+
"<author>John Smith</author>"+
"<body>Last short article.</body>"+
"</article>";
static final String[] ARTICLES = {XML1, XML2, XML3};
public static void main(String s[])
{
XmlDbTester xdt = new XmlDbTester();
Connection c = xdt.getConnection();
xdt.loadDemoData(c);
xdt.demoXmlResult(c);
以上所述是小编给大家介绍的使用JDBC4.0操作XML类型数据的方法网站的支持!
来源:http://www.cnblogs.com/excalimax/archive/2016/08/24/5804543.html


猜你喜欢
- 本文实例讲述了C#手工双缓冲技术。分享给大家供大家参考。具体如下:using System;using System.Collections
- 1.JMM数据原子操作read(读取)∶从主内存读取数据load(载入):将主内存读取到的数据写入工作内存use(使用):从工作内存读取数据
- 前言这似乎是 Reactor 的热门搜索之一,至少当我在谷歌中输入 onErrorContinue 时,onErrorResume 会在它旁
- 所属命名空间:System.Collections.Generic public class
- 前言我曾经在一篇介绍 Compose Navigation 的文章 中提到了 Navigation 的状态保存实际是由 rememberSa
- 本文我想跟大家分享的是如何将 C# 中的一些图像对象保存到 Oracle 中的 BLOB 字段中,这里我们并不想从零开始,而是使用我自己的框
- 基于SMTP发送一个简单的邮件首先,需要一个认证器:package No001_基于SMTP的文本邮件;import javax.mail.
- 前言Compose的动画Api用起来很简单,效果看起来很神奇,那么它内部到底是如何运转的呢?使用动画的代码示例:var isOffset b
- 本文实例讲述了C#设置输入法的方法。分享给大家供大家参考。具体如下:private void Form1_Load(object sende
- 本文实例为大家分享了jdk1.7配置教程,供大家参考,具体内容如下第一步:下载jdk1.7下载地址:链接 密码: wrmf第二步:
- PS:公司的业务中有个超级大的作业就是把OFFICE文档转成PDF,我猜之前没程序猿们,公司那些人应该是一个个手动转。强烈为猿们感叹,帮你们
- 使用Unity API PlayerBuildInterface.CompilePlayerScripts 将项目中的代码生成为 DLL 程
- 本文实例为大家分享了Java手写线程池的实现代码,供大家参考,具体内容如下1.线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在
- 本文实例为大家分享了Android仿微信长按录制视频并播放功能的具体代码,供大家参考,具体内容如下一、点击按钮进行录制首先要获取摄像拍照的权
- 在日常开发中,可能会遇到同一份代码,需要根据运营需求打出不同包名、不同图标、不同名称的Apk,发布到不同的渠道中。Android Studi
- 如果发现maven项目里面src/main/resources下的配置文件或src/main/java下的xml配置文件未能同步至targe
- 在java中读取读取文件,经常因为路径的问题找不到,此文用于记录如何定位文件的简单方法。本基于springboot做的测试,主要是构建工程方
- AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Map
- 一、序言在日常一线开发过程中,总有列表转树的需求,几乎是项目的标配,比方说做多级菜单、多级目录、多级分类等,有没有一种通用且跨项目的解决方式
- 下面对Java反射的基础知识进行说明和总结:首先定义一个MyBase类,其中有私有字段,也有公有字段。同时也有公有方法和私有方法。MyBas