解答例 - 実習課題1 - 5.ResultSetを用いた更新処理
(実習課題1)
以下のコンソールアプリケーションを作成しなさい。
- まず「product」テーブルの値を表示する。
- 表示しつつ「price」が500以上であるものの値を、1割引にする事。
- プログラム実行後、データベースの値が更新されている事を確認する事。
解答例
▼データベースアクセス用クラスのソース
package com.techscore.jdbc.chapter5.exercise1; /** * ProductDAO.java * TECHSCORE JDBC5章 実習課題1 * * 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{ protected final int DISCOUNT = 1; protected final int STAY = 0; private Connection getConnection() throws SQLException,ClassNotFoundException{ Connection conn = null; Class.forName("org.postgresql.Driver"); conn = DriverManager.getConnection("jdbc:postgresql://dbserver:5432/Training" ,"postgres" //ユーザ名 ,""); //パスワード conn.setAutoCommit(false); return conn; } public List loadSummary(int method) 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 order by p_num"; PreparedStatement statement = conn.prepareStatement( sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet 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); if (method == DISCOUNT){ int price = result.getInt(4); if (price >= 500) { price *= 0.9; result.updateInt(4, price); result.updateRow(); } } } conn.commit(); result.close(); statement.close(); }finally{ if (conn != null){ conn.close(); } } return list; } }
▼Product(製品)情報管理クラスのソース
▼テーブル表示ウィンドウ作成クラスのソース
package com.techscore.jdbc.chapter5.exercise1; /** * DisplayProductTable.java * TECHSCORE JDBC5章 実習課題1 * * Copyright (c) 2004 Four-Dimensional Data, Inc. */ import java.util.Iterator; import java.util.List; import java.sql.SQLException; public class DisplayProductTable{ private static void displayData(int method) { //テーブルのタイトル String[] columnNames = {"番号", "名前", "タイプ", "価格"}; try{ ProductDAO productDAO = new ProductDAO(); List list = (List)productDAO.loadSummary(method); //テーブルデータ内容 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()); int price = product.getPrice(); } }catch(SQLException e){ e.printStackTrace(); System.exit(1); }catch(ClassNotFoundException e){ e.printStackTrace(); System.exit(1); } } public static void main(String[] args) { ProductDAO productDAO = new ProductDAO(); System.out.println("■最初のデータベースの内容"); displayData(productDAO.DISCOUNT); System.out.println("■変更後データベースの内容"); displayData(productDAO.STAY); } }
▼データベースの指定
▼実行結果例
============== ■最初のデータベースの内容 番号:101 名前:Accort タイプ:sedan 価格:230 番号:102 名前:AccortWagon タイプ:RV 価格:280 番号:103 名前:Insphire タイプ:sedan 価格:500 番号:104 名前:Hodyssey タイプ:RV 価格:280 番号:105 名前:ShtepWagon タイプ:RV 価格:200 番号:106 名前:Accort タイプ:sedan 価格:230 番号:107 名前:Accort タイプ:sedan 価格:290 ■変更後データベースの内容 番号:101 名前:Accort タイプ:sedan 価格:230 番号:102 名前:AccortWagon タイプ:RV 価格:280 番号:103 名前:Insphire タイプ:sedan 価格:450 番号:104 名前:Hodyssey タイプ:RV 価格:280 番号:105 名前:ShtepWagon タイプ:RV 価格:200 番号:106 名前:Accort タイプ:sedan 価格:230 番号:107 名前:Accort タイプ:sedan 価格:290 ==============