JAXB对象到Clob

时间:2014-02-17 14:00:22

标签: java xml jaxb 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。

1 个答案:

答案 0 :(得分:0)

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

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

选项2:使用JAXB提供的XML marshal / unmarshal路径以XML文本形式读取/写入对象的状态。这将对象的XML表示存储在数据库中。

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