从对象创建对象输出流

cou*_*ech 8 java database jdbc objectoutputstream

我想创建ObjectOutputStream,但我不想将对象保存在文件中,那么如何做到这一点?所有教程(我发现)只说文件方式:

        FileOutputStream fos = new FileOutputStream("t.tmp");
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(new Date());
        oos.close();
Run Code Online (Sandbox Code Playgroud)

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

谢谢回答...

Bal*_*usC 9

将其存储在字节数组中.你可以用ByteArrayOutputStream它.这样你就可以使用了PreparedStatement#setBytes().

ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(new Date());
oos.close();
// ...
preparedStatement.setBytes(i, baos.toByteArray());
Run Code Online (Sandbox Code Playgroud)

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


Pet*_*hev 5

ByteArrayOutputStream bos = new ByteArrayOutputStream();

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

byte[] data = bos.toByteArray();
Run Code Online (Sandbox Code Playgroud)

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