JAVA对DB2中BLOB对象的读写

网上有很多读写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();
   }

}
 


 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值