我只想知道我们如何“序列化”Jdbc4SQLXML类,它扩展了java.lang.Object并按照postgres API实现了java.sql.SQLXML。即使SQLXML接口也没有扩展Serializable接口。
我这样做的原因是,我试图从其他JVM中获取一个对象,而此时我得到了这个异常。[中英文] java.io.NotSerializableException: org.postgresql.jdbc4.Jdbc4SQLXML.
这里SQLXML是我的返回类型。
提前谢谢。
发布于 2014-02-25 12:16:05
Jdbc4SQLXML是不可序列化的,因为它实现的接口是不可序列化的,规范并不需要它。这是有充分理由的: JDBC的SQL/XML支持被允许是“惰性的”,其中SQL/XML结果的JDBC对象实际上只是指向数据库中数据的指针,并且它是按需获取的。这也是结果集关闭后结果对象无效的原因。
因此,虽然PgJDBC可以使这个对象可序列化,因为它不会延迟加载,但这意味着我们以后永远不能将其更改为延迟加载。
如果要序列化XML,请使用标准的SQL/XML方法从结果对象中读取XML并序列化结果XML。不要试图直接序列化JDBC结果对象。
参见the JDBC tutorial。您将在这里看到如何从结果对象中获取Document。Document是可序列化的。
发布于 2014-02-24 22:39:35
如果一个类没有实现可序列化,你就不能通过常规的api发送它。您可以使用自己的序列化程序(它使用getter/setters或Java反射进入其他非公共字段);然后通过web服务器发送字符串,然后在另一端执行相反的操作。基本上是你自己的序列化。但是也有一些包可以提供帮助,比如http://x-stream.github.io/ Java7也有内置的帮助程序
重要的问题可能是你为什么要这样做?如果在JVM1中打开了一些资源,那么这个对象在JVM2中可能会失败。
为什么不制作自己的POJO并使用它来重新创建对象呢?
这也将在未来版本中的变化情况下保护-如果这个第三方对象中的某些东西发生了变化,这并不意味着序列化。
https://stackoverflow.com/questions/21989488
复制相似问题