目次へ

解答例 - 実習課題2 - 5.ResultSetを用いた更新処理

(実習課題2)

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

  • まず「product」テーブルの値を表示する。
  • 表示後、新しいデータの挿入を行う。挿入する値は、コンソールからの入力によって指定するようにする事。
  • プログラム実行後、入力したデータがテーブルに挿入されている事を確認する事。

解答例

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

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

public class ProductDAO{

    private ResultSet result = null;
    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 List loadSummary() throws SQLException,ClassNotFoundException{
        List list = new LinkedList();
            conn = getConnection();
            final String sql = "select p_num, p_name, type, price" +
                               " from product order by p_num";
            statement = conn.prepareStatement(
                                         sql,
                                         ResultSet.TYPE_SCROLL_INSENSITIVE,
                                         ResultSet.CONCUR_UPDATABLE);
            result = statement.executeQuery();
            while (result.next()){
                Product data = new Product(
                                           result.getInt(1),
                                           result.getString(2),
                                           result.getString(3),
                                           result.getInt(4));
                list.add(data);
            }
        return list;
    }
    public void insert(Product product) throws SQLException{
        result.moveToInsertRow();
        result.updateInt(1,product.getPNum());
        result.updateString(2,product.getPName());
        result.updateString(3,product.getType());
        result.updateInt(4,product.getPrice());
        result.insertRow();
        result.moveToCurrentRow();
    }
    public void finishTransaction() throws SQLException{
        try{
            result.close();
            statement.close();
            conn.commit();
            statement.close();
        }finally{
            if (conn != null){
                conn.close();
            }
        }
    }    
}

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

JDBC 1章 実習課題2を参照

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

package com.techscore.jdbc.chapter5.exercise2;
/**
 * DisplayProductTable.java
 * TECHSCORE JDBC5章 実習課題2
 *
 * Copyright (c) 2004 Four-Dimensional Data, Inc.
 */
import java.util.Iterator;
import java.util.List;
import java.io.DataInputStream;
import java.io.IOException;
import java.sql.SQLException;

public class DisplayProductTable{
    private static ProductDAO productDAO = null;
    private static void displayData() {

        //テーブルのタイトル
        String[] columnNames = {"番号",
                                "名前",
                                "タイプ",
                                "価格"};
        try{
            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();
                System.out.println(columnNames[0] + ":"
                                   + product.getPNum()
                                   + "\t"
                                   + columnNames[1]  + ":"
                                   + product.getPName()
                                   + "\t"
                                   + columnNames[2] + ":"
                                   + product.getType()
                                   + "\t"
                                   + columnNames[3] + ":"
                                   + product.getPrice());
            }
        }catch(SQLException e){
            e.printStackTrace();
        }catch(ClassNotFoundException e){
            e.printStackTrace();
        }
    }

    private static Product inputData(){
        Product product = new Product();
        try{
            DataInputStream input = new DataInputStream(System.in);
            System.out.println("■新データ入力");
            System.out.println("製品番号入力:");
            product.setPNum(Integer.parseInt(input.readLine()));
            System.out.println("製品名入力  :");
            product.setPName(input.readLine());
            System.out.println("製品型入力  :");
            product.setType(input.readLine());
            System.out.println("製品価格入力:");
            product.setPrice(Integer.parseInt(input.readLine()));
            System.out.println("挿入しました");        
        }catch(IOException e){
            e.printStackTrace();
        }
        return product;
    }

    public static void main(String[] args) {
        System.out.println("■最初のデータベースの内容");
        displayData();
        //データ入力
        Product product = inputData();
        try{
            productDAO.insert(product);
            productDAO.finishTransaction();
            System.out.println("■変更後データベースの内容");
            displayData();
            productDAO.finishTransaction();
        }catch(SQLException e){
            System.out.println("■入力された製品番号は既にあります");
            e.printStackTrace();
        }
    }
}

▼データベースの指定

JDBC 1章 実習課題1を参照

▼実行結果例

==============
■最初のデータベースの内容
番号:101  名前:Accort       タイプ:sedan  価格:230
番号:102  名前:Accort Wagon タイプ:RV     価格:280
番号:103  名前:Insphire     タイプ:sedan  価格:500
番号:104  名前:Hodyssey     タイプ:RV     価格:280
番号:105  名前:Shtep Wagon  タイプ:RV     価格:200
番号:107  名前:Accort       タイプ:sedan  価格:290
■新データ入力
製品番号入力:
108
製品名入力  :
MarlX
製品型入力  :
sedan
製品価格入力:
400
挿入しました
■変更後データベースの内容
番号:101  名前:Accort       タイプ:sedan  価格:230
番号:102  名前:Accort Wagon タイプ:RV     価格:280
番号:103  名前:Insphire     タイプ:sedan  価格:500
番号:104  名前:Hodyssey     タイプ:RV     価格:280
番号:105  名前:Shtep Wagon  タイプ:RV     価格:200
番号:107  名前:Accort       タイプ:sedan  価格:290
番号:108  名前:MarlX        タイプ:sedan  価格:400
==============

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp