- PR -

バイナリデータの取り出し

1
投稿者投稿内容
アレク
ベテラン
会議室デビュー日: 2002/10/23
投稿数: 97
投稿日時: 2002-12-19 01:38
いつもお世話になっております。

PostgreSQL7.2.2 を利用して画像データの保存と取得を行いたいと思っています。
Beans で作った画像データを OutputStream に入れて、Servlet でそのまま表示
させようと思い、下記のドキュメントを参考にバイナリデータの保存と取得のコードを
書いたのですが、どうもうまくいきません。

PostgreSQL 7.2.3 ドキュメント
http://search.net-newbie.com/pgsql/jdbc-binary-data.html

SQL エラーは出ないのですが、画像データをゲットするとメモリのアドレスのようなものしか取得出来ません。
普通に psql で select するとバイナリデータのようなものが画面上にバーッと表示されるので、登録の方はうまくいっているような気もするのですが・・・。

原因がいまいちよく分かりません。

登録と取得のコードを掲載しますので、問題点があればご指摘下さい。

コード:
//画像を生成して登録

byte image[] = null; 
OutputStream ostream = null;

//コネクションプールからコネクションを取得
getConnection();

image = new byte[20000];
	
//生成された画像を保存
ostream.write(image);  //ostream には画像データが入っている
						
//SQLの発行
ps = connection.prepareStatement
     ("update imdata set chart = ? where id = '" + id + "'");
ps.setBytes(1, image);

ps.executeUpdate();


コード:
//画像を取得

byte image[] = null; 
OutputStream ostream = null;

//コネクションプールからコネクションを取得
getConnection();

image = new byte[20000];

//SQLの生成
String sql = ("select chart from imdata where id = '" + id + "'");
stmt = connection.createStatement();
rs = stmt.executeQuery(sql);

if(rs != null)
{
   while(rs.next())
   {
      image = rs.getBytes(1);
   }
}
			
ostream.write(image);



よろしくお願い致します。

lombroso
会議室デビュー日: 2002/12/18
投稿数: 4
投稿日時: 2002-12-19 16:55
chart列の属性はbyteaですね?
当方では問題なくbyteaへのバイナリデータ格納/取り出しは出来ています。

まずはServletではなく、Javaアプリケーションで格納/取り出し部分のコードが
正しいかどうか、確認されてはいかがでしょうか?
lombroso
会議室デビュー日: 2002/12/18
投稿数: 4
投稿日時: 2002-12-19 16:57
p.s.
ちなみに当方のPostgreSQLのバージョンは7.3です。
アレク
ベテラン
会議室デビュー日: 2002/10/23
投稿数: 97
投稿日時: 2002-12-21 16:49
お返事遅くなってしまって、申し訳ございません。

lombroso さん、ありがとうございます。

無事、問題解決されました。
お恥ずかしいことですが、全く初歩的なミスでした。

Beans で作った画像を OutputStream に出力していたのですが、
何を勘違いしたのか、OutputStream から byte 型にデータを入れようとしていました。
そんなことがうまくいくはずもなく、結局何も入っていない byte 型データをデータベース
に登録し、それを取得しても表示されなかっただけの話でした。

それで、画像の出力を File に行い、FileInputStream から byte 型にデータを入れること
によって、無事うまくいくようになりました。

誠に、ご迷惑をおかけしました。
1

スキルアップ/キャリアアップ(JOB@IT)