如何在java中序列化Jdbc4SQLXML类

时间:2014-02-24 13:40:01

标签: java postgresql-9.1

我只想知道我们如何“序列化”Jdbc4SQLXML类,它是扩展java.lang.Object并根据postgres API实现java.sql.SQLXML。甚至SQLXML接口也没有扩展Serializable接口。

为什么这样做,我试图从其他JVM获取一个对象,那时候得到这个异常。 java.io.NotSerializableException: org.postgresql.jdbc4.Jdbc4SQLXM L。

这里SQLXML是我的返回类型。

提前致谢。

2 个答案:

答案 0 :(得分:1)

Jdbc4SQLXML不是Serializable,因为它实现的界面不是Serializable,规范并不需要它。这有一个很好的理由:JDBC的SQL / XML支持允许是" lazy",其中SQL / XML结果的JDBC对象实际上只是指向数据的指针在数据库中,它是按需提取的。这也是结果集关闭后结果对象无效的原因。

因此,虽然PgJDBC可以使这个对象可序列化,因为它不会懒得加载,但这意味着我们以后永远不能将其更改为延迟加载。

如果要序列化XML,请使用标准SQL / XML方法从结果对象中读取XML并序列化生成的XML。不要尝试直接序列化JDBC结果对象。

the JDBC tutorial。您将看到如何从结果对象中获取DocumentDocument可序列化。

答案 1 :(得分:0)

如果某个类没有实现序列化,则无法通过常规api发送它。您可以使用自己的序列化程序(使用getter / setter或Java反射来进入其他非公共字段);然后通过Web服务器发送字符串,并在另一侧执行相反的操作。基本上是你自己的序列化。但是有些软件包可以帮助{7}} Java 7也有内置帮助程序

重要的问题可能是你想要这样做的原因?如果在Jvm 1中打开了一些资源,则此对象可能在Jvm 2中失败。

为什么不制作自己的POJO并使用它来重新创建对象?

如果在将来的版本中发生变化,这将保护 - 如果此第三方对象中的某些内容发生了变化,并不是为了序列化。