2014-02-17 49 views
2

如何创建jlob对象到Clob。当我尝试以下不可序列化错误时。JAXB对象到Clob

public static void createClob(TestTo testTo){ 
     PreparedStatement pst = null; 
     Connection con = null; 
     //Clob studentListClob = null;     

     try { 
      con = openOASDBcon(false); 
      pst = con.prepareCall(INSERT_Clob); 
      pst.setBytes(1, getByteArrayObject(testTo)); 
      pst.setString(2, ""); 
      pst.executeUpdate(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      close(con, pst); 
     } 
    } 


private static byte[] getByteArrayObject(TestTo testTo){ 

      byte[] byteArrayObject = null; 
      try { 

       ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
       ObjectOutputStream oos = new ObjectOutputStream(bos); 
       oos.writeObject(testTo); 

       oos.close(); 
       bos.close(); 
       byteArrayObject = bos.toByteArray(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
       return byteArrayObject; 
      } 
      return byteArrayObject; 
     } 

这是不可能实现可序列化的。有什么最好的方法来实现jbb对象clob。

+0

看来你可能会问如何让JAXB创建Serializable类。如果是这种情况,请参阅http://stackoverflow.com/questions/1513972/how-to-generate-a-java-class-which-implements-serializable-interface-from-xsd-us – Rob

+0

不仅可序列化。我想将jaxb对象转换为clob。有什么办法吗? – jackyesind

+0

@Rob。有什么办法可以做 – jackyesind

回答

0

有几种方法可以将JAXB对象粘贴到数据库中的CLOB(或BLOB)列中。我认为你将不得不做一些自定义插入和选择逻辑来将JAXB对象放入列中 - 正常的ORM模型将是每个对象的一行,并且每个对象的字段都有一列(例如,如果您使用的是休眠)。

选项1:配置xjc以生成可序列化的JAXB类(How to generate a Java class which implements Serializable interface from xsd using JAXB?)。然后使用Serializable接口从clob/blob的输入/输出流中读取/写入对象。这将Java对象表示存储在数据库中。

选项2:使用JAXB提供的XML编组/解组路径将对象的状态作为XML文本读取/写入。这将对象的XML表示存储在数据库中。

我个人会选择2 - XML表示。我认为在XSD中管理更改会更容易,并确保您可以阅读旧对象,而不必处理Java的序列版本ID。另外,您可能需要考虑在将XML放入CLOB之前先对XML进行压缩(请参阅Compressing and decompressing streams)。