JAVA对DB2中BLOB对象的读写 您所在的位置:网站首页 java获取clob字段值 JAVA对DB2中BLOB对象的读写

JAVA对DB2中BLOB对象的读写

#JAVA对DB2中BLOB对象的读写| 来源: 网络整理| 查看: 265

网上有很多读写blob列的例子,但是大多都是从文件读入,存到blob中,以及从blob读取然后存到文件中,所以在这我就不写了。我想写的是如何把一个java对象存储到blob中。

对于oracle来说,要想写一个blob字段需要先获得指向它的游标,因此你不能直接insert into,你需要先插入一条blob字段为null的记录,然后update,刚开始我以为DB2也是这么回事,而且好些网站上写的也是这么实现的,后来在某人的blog上看到根本就不需要这么麻烦,直接插入就可以了,所以我写了段代码实验一下,果然可以。主要思路是将java对象转换成byte[],然后将byte[]插入到blob字段中,要输出byte[]就要用到ByteArrayOutputStream和ObjectOutputStream,其中ObjectOutputStream可以将Object写到输出流中,而ByteArrayOutputStream可以把输出流转换成byte[],转换成byte[]后一切就简单了。

先写一个java类

package test; import java.io.Serializable; public class O implements Serializable{ private String s; private String[] ss; public String getS() { return s; } public void setS(String s) { this.s = s; } public String[] getSs() { return ss; } public void setSs(String[] ss) { this.ss = ss; } }

这个类包含了两个域,一个是String一个是String数组

转换方法

private byte[] getbytefromobject(Object oo){ ByteArrayOutputStream bs=new ByteArrayOutputStream(); try { ObjectOutputStream oos = new ObjectOutputStream(bs); oos.writeObject(oo); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }//create a objectoutputstream from bytearrayoutputstream return bs.toByteArray(); }

 

获得数据库连接

private Connection createConnection(String servername,String user,String pass) { Connection conn = null; try { Class.forName("COM.ibm.db2.jdbc.app.DB2Driver"); conn = java.sql.DriverManager.getConnection("jdbc:db2:"+servername, user, pass); } catch (SQLException ex1) { ex1.printStackTrace(); } catch (ClassNotFoundException ex) { ex.printStackTrace(); } return conn; }

 

写入blob

private void writeblob(Connection conn,O oo,byte[] b){ try { PreparedStatement ps=conn.prepareStatement("insert into test values(?,?)"); ps.setString(1, "2"); ps.setBytes(2, b); ps.executeUpdate(); conn.commit(); System.out.println("insert successful"); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } }

 

读出blob

private void readblob(Connection conn){ java.sql.Statement st; try { st = conn.createStatement(); java.sql.ResultSet rs=st.executeQuery("select ob from test "); while(rs.next()) { Blob bb=rs.getBlob("ob"); bb.getBinaryStream(); InputStream is= bb.getBinaryStream(); ObjectInputStream ois=new ObjectInputStream(is); O oo=(O) ois.readObject(); System.out.println(oo.getS()); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有