从对象创建对象输出流

时间:2010-05-20 11:52:35

标签: java database jdbc objectoutputstream

我想在ObjectOutputStream上创建,但我不想将对象保存在文件中,那么该怎么做呢?所有教程(我发现)只说文件方式:

        FileOutputStream fos = new FileOutputStream("t.tmp");
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(new Date());
        oos.close();

我想将对象存储到数据库中,因此我需要在类setBinaryStream()的方法PreparedStatement中指定一个流。

感谢您的回答......

3 个答案:

答案 0 :(得分:7)

将其存储在字节数组中。您可以使用ByteArrayOutputStream。这样您就可以使用PreparedStatement#setBytes()

ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(new Date());
oos.close();
// ...
preparedStatement.setBytes(i, baos.toByteArray());

那说,这是一个很好的气味。您确定需要将Java对象序列化到数据库中吗?这样它们就是无法索引和无法搜索的。例如,如果您将每个Person序列化存储在数据库中,则不能再执行SELECT * FROM person WHERE name = 'John'。通常的做法是对实体和数据库表进行1:1映射。例如,Date可以完美地存储在DATETIME / TIMESTAMP列中。

答案 1 :(得分:5)

ByteArrayOutputStream bos = new ByteArrayOutputStream();

ObjectOutputStream os = new ObjectOutputStream(bos);
os.writeObject(new Date());
os.close();

byte[] data = bos.toByteArray();

所以现在你有一个字节数组并用它做你想做的事。

答案 2 :(得分:0)

您是否需要使用输出流写入数据库?在尝试编写输出流实现之前,我会认真考虑查看持久性api ..因为连接细节等,可能会很难管理。

查看link text并记住它也可以在J2SE中使用。