使用db2 9x实现包含二进制文件内容的xml文档的存储和检索

使用db29.x XML类型实现二进制数据的存储与检索

存储
Xml文档可以用<[!CDATA[]]>在文档内部来包含一些二进制方式的内容,如:可执行文件、pdf文档等等。
Db2 9x提供了对xml直接存储的支持,那么怎么样将二进制文件的内容写入到xml文档,并将文档保存到db2 数据库中呢?
实验的过程如下:
在db2中建一张包含xml字段的表,只包含2个字段,a,b,其中b为xml类型的字段;
使用如下的代码实现二进制xml文件的存储:
public static void insert(Connection cnn) throws Exception{
PreparedStatement preparedStatement =
cnn.prepareStatement("INSERT INTO admin.test VALUES(1,?)");
preparedStatement.setInt(1, 1);
String xml="<root><![CDATA[";//可以在xml文档中增加一些描述性的元素来说明二进制文件的摘要信息
//以下读取文件内容
StringBuffer m_cStrXML= new StringBuffer();
File cFileBinary = new File("c:\\\\test.chm");

int fSize = new Long(cFileBinary.length()).intValue();
byte[] fContent = new byte[fSize];

FileInputStream fis = new FileInputStream(cFileBinary);
int bRead;
String cStrByte=null;
if((bRead=fis.read(fContent,0,fSize))!=-1)
{
//非常关键的一步,将二进制编码
m_cStrXML.append(new String(new Base64().encode(fContent)));
}
xml+=m_cStrXML.toString();
xml+="]]></root>";
preparedStatement.setString(1, xml);
int n = preparedStatement.executeUpdate();
cnn.commit();
}
检索
前面步骤完成了包含二进制内容的xml文档的存储,通过db2提供的xquery语法,可以对这个xml表的内容进行方便的检索,那么查到需要的文件后,怎么将二进制内容重新转换成合适的文件呢?
以下的代码假设已经知道了二进制文件的格式为chm文件,在实际的应用中,可以通过在xml文档中增加其他的摘要信息来描述二进制数据,比如:文件的格式、打开文件的格式,可以与DTD、Schema等XML工具来实现更强的功能。
恢复二进制文件的代码如下:
public static void read(Connection cnn) throws Exception{
//xs:string必须加上,否则返回的xml文档会包含xml Tag
PreparedStatement preparedStatement =
cnn.prepareStatement("select xmlquery('xs:string($xx/root)' passing b as \"xx\") from admin.test");
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
String xml = resultSet.getString(1);
//Base64解码
Base64 bs = new Base64();
byte[] bt = bs.decode(xml);
//以下输出到文件,假定文件为chm格式
File fileOutput = new File("C:\\\\test1.chm");
FileOutputStream fo = new FileOutputStream(fileOutput);
fo.write(bt);
fo.close();
System.out.println("chm retrieved");
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值