目次へ

解答例 - 実習課題2 - 1.JDBC API

(実習課題2)

以下のGUIアプリケーションを作成しなさい。

  • ウィンドウに含まれるコンポーネントは、テーブルのみ。
  • データベースに接続し、「product」テーブルのデータをテーブルに使用させること。

解答例

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

package com.techscore.jdbc.chapter1.exercise2;
/**
 * CoonectDataBase.java
 * TECHSCORE JDBC1章 実習課題2
 *
 * Copyright (c) 2004 Four-Dimensional Data, Inc.
 */
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.DriverManager;
import java.util.LinkedList;
import java.util.List;

public class ProductDAO{
    
    private Connection getConnection() throws SQLException,ClassNotFoundException{
        Connection conn = null;
        Class.forName("org.postgresql.Driver");
        conn = DriverManager.getConnection("jdbc:postgresql://dbserver:5432/Training"
                                           ,"postgres"  //ユーザ名
                                           ,"");        //パスワード
        return conn;
    }
    
    public List loadSummary() throws SQLException,ClassNotFoundException{
        List list = new LinkedList();
        Connection conn = null;
        try{
            conn = getConnection();
            final String sql = "select p_num, p_name, type, price" +
                               " from product";
            Statement statement = conn.createStatement();
            ResultSet result = statement.executeQuery(sql);
            while (result.next()){
                Product data = new Product(
                                           result.getInt(1),
                                           result.getString(2),
                                           result.getString(3),
                                           result.getInt(4));
                list.add(data);
            }
            result.close();
            statement.close();
        }finally{
            if (conn != null){
                conn.close();
            }
        }
        return list;
    }
}

▼テーブル表示ウィンドウ作成クラスのソース

package com.techscore.jdbc.chapter1.exercise2;
/**
 * DisplayProductTable.java
 * TECHSCORE JDBC1章 実習課題2
 *
 * Copyright (c) 2004 Four-Dimensional Data, Inc.
 */
import java.util.Iterator;
import java.util.List;
import java.sql.SQLException;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import java.awt.Dimension;
import java.awt.GridLayout;

public class DisplayProductTable extends JPanel {
    public DisplayProductTable() {
        super(new GridLayout(1,0));

        //テーブルのタイトル
        String[] columnNames = {"製品ナンバー",
                                "製品名",
                                "製品のタイプ",
                                "製品の価格"};
        try{
            ProductDAO productDAO = new ProductDAO();
            List list = (List)productDAO.loadSummary();
            //テーブルデータ内容
            Object[][] data = new Object[list.size()][4];
            Iterator ite=list.iterator();
            for(int i=0; ite.hasNext(); i++){
                Product product = (Product)ite.next();
                data[i][0] = new Integer(product.getPNum()).toString();
                data[i][1] = product.getPName();
                data[i][2] = product.getType();
                data[i][3] = new Integer(product.getPrice()).toString();
            }
            final JTable table = new JTable(data, columnNames);
            table.setPreferredScrollableViewportSize(new Dimension(400, 70));
            JScrollPane scrollPane = new JScrollPane(table);
            add(scrollPane);
        }catch(SQLException e){
            e.printStackTrace();
            System.exit(1);
        }catch(ClassNotFoundException e){
            e.printStackTrace();
            System.exit(1);
        }
    }

    private static void createAndShowGUI() {
        JFrame frame = new JFrame("製品情報テーブル表示");

        DisplayProductTable newContentPane = new DisplayProductTable();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setContentPane(newContentPane);

        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        createAndShowGUI();
    }
}

▼Product(製品)情報管理クラスのソース

package com.techscore.jdbc.chapter1.exercise2;
/**
 * Product.java
 * TECHSCORE JDBC1章 実習課題2
 *
 * Copyright (c) 2004 Four-Dimensional Data, Inc.
 */

public class Product {

    private String  pName;
    private int     pNum;
    private int     price;
    private String  type;
    public Product(){
    }

	public Product(int pNum,String pName,
                   String type,int price){
        this.pName = pName;
        this.pNum  = pNum;
        this.price = price;
        this.type  = type;
    }

	public String getPName() {
		return pName;
	}

	public int getPrice() {
		return price;
	}

	public String getType() {
		return type;
	}

	public int getPNum() {
		return pNum;
	}

	public void setPName(String string) {
		this.pName = string;
	}

	public void setPrice(int i) {
		this.price = i;
	}

	public void setType(String string) {
        this.type = string;
	}

	public void setPNum(int pNum) {
        this.pNum = pNum;
	}

}

▼テスト用テーブル作成ファイル

/**
 * TECHSCORE JDBC1章 実習課題2
 * テスト用テーブル作成ファイル
 *
 * Copyright (c) 2004 Four-Dimensional Data, Inc.
 *
 * --テーブル構成--
 * product: 製品管理表
 *   p_num  製品ナンバー
 *   p_name 製品名
 *   type   製品のタイプ
 *   price  製品の価格 (単位: 万円)
 * ----------------
 */
CREATE TABLE product
(
    p_num  INTEGER PRIMARY KEY,
    p_name VARCHAR(40) NOT NULL,
    type   VARCHAR(20) NOT NULL,
    price  INTEGER     NOT NULL
);

INSERT INTO product_f VALUES (101, 'Accort',       'sedan', 230);
INSERT INTO product_f VALUES (102, 'Accort Wagon', 'RV',    280);
INSERT INTO product_f VALUES (103, 'Insphire',     'sedan', 300);
INSERT INTO product_f VALUES (104, 'Hodyssey',     'RV',    280);
INSERT INTO product_f VALUES (105, 'Shtep Wagon',  'RV',    200);

▼データベースの指定

JDBC 1章 実習課題1を参照


↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp