目次へ

解答例 - 実習課題2 - 4.ラージオブジェクト

(実習課題2)

以下のプログラムを作成しなさい。

  • 「product_photo」テーブルにある画像データを表示するウィンドウプログラム。
  • 製品番号を指定すると、それに対応する画像データがウィンドウに表示されるようにする事。

解答例

▼データベースアクセス用クラスのソース

package com.techscore.jdbc.chapter4.exercise2;
/**
 * ProductPhotoDAO.java
 * TECHSCORE JDBC4章 実習課題2
 *
 * Copyright (c) 2004 Four-Dimensional Data, Inc.
 */
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.DriverManager;
import java.io.InputStream;
import java.sql.ResultSet;

public class ProductPhotoDAO{
    private PreparedStatement statement = null;
    private Connection conn = null;

    private Connection getConnection() throws SQLException,ClassNotFoundException{
        Class.forName("org.postgresql.Driver");
        conn = DriverManager.getConnection("jdbc:postgresql://dbserver:5432/Training"
                                           ,"postgres"  //ユーザ名
                                           ,"");        //パスワード
        conn.setAutoCommit(false);  //自動コミットモード解除
        return conn;
    }
    
    public InputStream loadImage(int pNum) throws SQLException,ClassNotFoundException{
        conn = getConnection();
        InputStream input = null; 
        final String sql = "select p_photo from product_photo where p_num=?";
        statement = conn.prepareStatement(sql);
        statement.setInt(1,pNum);
        ResultSet result = statement.executeQuery();
        if (!result.next()) {
            System.out.println("製品番号" + pNum + "の画像はありません");
            throw new SQLException();
        }else{
            input = result.getBinaryStream(1);
        }
        conn.commit();
        return input;
    }

    public void finishTransaction() throws SQLException{
        try{
            statement.close();
        }finally{
            if (conn != null){
                conn.close();
            }
        }
    }
}

▼データ挿入測定クラスのソース

package com.techscore.jdbc.chapter4.exercise2;
/**
 * DisplayImageData.java
 * TECHSCORE JDBC4章 実習課題2
 *
 * Copyright (c) 2004 Four-Dimensional Data, Inc.
 */
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;import java.io.InputStream;
import java.io.FileOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.SQLException;

public class DisplayImageData extends JFrame {
    protected static final String OUTFILE = "outImage.gif";
    public DisplayImageData(){
        super("データベースから読み込んだ画像");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        JLabel label = new JLabel(new ImageIcon(OUTFILE));
        getContentPane().add(label);
        pack();
    }
    public static void main(String[] args) {
        try {
            ProductPhotoDAO photoDAO = new ProductPhotoDAO();
            int pNum =Integer.parseInt(args[0]);
            InputStream input = photoDAO.loadImage(pNum);
            //表示用ファイルへ保存
            FileOutputStream output = new FileOutputStream(OUTFILE);
            int bdata;
            while ((bdata = input.read()) != -1) {
                output.write(bdata);
            }
            output.close();
            input.close();
            photoDAO.finishTransaction();
            //画像表示
            new DisplayImageData().setVisible(true);
        }catch(SQLException e){
            e.printStackTrace();
        }catch(ClassNotFoundException e){
            e.printStackTrace();
        }catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("Usage:java InsertImageData [製品番号] [画像ファイル名]");
        }catch(FileNotFoundException e){
            e.printStackTrace();
        }catch (IOException e) {
            e.printStackTrace();
        }
    }
}

▼データベースの指定

JDBC 1章 実習課題1を参照


↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp