gpt4 book ai didi

java - JAXB 对象到 Clob

转载 作者:行者123 更新时间:2023-11-29 08:52:51 27 4
gpt4 key购买 nike

如何创建 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;
}

实现序列化是不可能的。有什么最好的方法可以将 jaxb 对象实现为 clob。

最佳答案

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

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

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

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

关于java - JAXB 对象到 Clob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21831031/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com