我想在ObjectOutputStream
上创建,但我不想将对象保存在文件中,那么该怎么做呢?所有教程(我发现)只说文件方式:
FileOutputStream fos = new FileOutputStream("t.tmp");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(new Date());
oos.close();
我想将对象存储到数据库中,因此我需要在类setBinaryStream()
的方法PreparedStatement
中指定一个流。
感谢您的回答......
答案 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中使用。