Я хочу создать на ObjectOutputStream
, но я не хочу сохранять объект в файле, поэтому как сделать это? Во всех учебных руководствах (что я нашел) говорится только о файле путь:
FileOutputStream fos = new FileOutputStream("t.tmp");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(new Date());
oos.close();
Я хочу хранить объект в базу данных, таким образом, я должен указать поток в методе setBinaryStream()
от класса PreparedStatement
.
Спасибо за ответ...
Вместо этого храните его в байтовом массиве. Для этого вы можете использовать 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 сущности и таблицы БД. Например, Дата
может прекрасно храниться в столбце DATETIME
/TIMESTAMP
.
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream os = new ObjectOutputStream(bos);
os.writeObject(new Date());
os.close();
byte[] data = bos.toByteArray();
Итак, теперь у вас есть массив байтов и делайте с ним что хотите.
вам конкретно нужно использовать outputstream для записи в базу данных? Я бы серьезно рассмотрел возможность использования persistence api, прежде чем пытаться написать реализацию outputstream... поскольку детали подключения и т.д. могут оказаться сложными в управлении.
посмотрите на текст ссылки и помните, что его можно использовать и в J2SE.