8

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

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

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

谢谢回答...

4

3 回答 3

10

而是将其存储在字节数组中。你可以用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列中。

于 2010-05-20T11:55:29.433 回答
5
ByteArrayOutputStream bos = new ByteArrayOutputStream();

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

byte[] data = bos.toByteArray();

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

于 2010-05-20T11:54:42.787 回答
0

您特别需要使用输出流写入数据库吗?在尝试编写输出流实现之前,我会认真考虑查看持久性 API。因为连接详细信息等可能难以管理。

查看链接文本并记住它也可以在 J2SE 中使用。

于 2010-05-20T11:55:31.803 回答