浏览 1968 次
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2008-05-15
最后修改:2009-03-23
存储 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"); } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |