8

で作成し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シリアル化されたそれぞれをDBに格納すると、それ以上はできなくなりSELECT * FROM person WHERE name = 'John'ます。通常は、エンティティと DB テーブルを 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 に答える