解答例 - 実習課題3 - 5.ResultSetを用いた更新処理
(実習課題3)
以下のコンソールアプリケーションを作成しなさい。
- まず「product」テーブルの値を表示する。
- 表示後、削除したい行の「p_num」をコンソールから入力し、その行をResultSetを用いて削除する事。
- プログラム実行後、入力したデータがテーブルから削除されている事を確認する事。
解答例
▼データベースアクセス用クラスのソース
package com.techscore.jdbc.chapter5.exercise3; /** * ProductDAO.java * TECHSCORE JDBC5章 実習課題3 * * 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 delete(int pNum) throws SQLException{ while (result.previous()) { if(pNum == result.getInt(1)){ result.deleteRow(); break; } } } public void finishTransaction() throws SQLException{ try{ result.close(); statement.close(); conn.commit(); statement.close(); }finally{ if (conn != null){ conn.close(); } } } }
▼Product(製品)情報管理クラスのソース
▼テーブル表示ウィンドウ作成クラスのソース
package com.techscore.jdbc.chapter5.exercise3; /** * DisplayProductTable.java * TECHSCORE JDBC5章 実習課題3 * * 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 int inputData(){ int pNum = 0; try{ DataInputStream input = new DataInputStream(System.in); System.out.println("■削除製品番号入力"); System.out.println("製品番号入力:"); pNum = Integer.parseInt(input.readLine()); }catch(IOException e){ e.printStackTrace(); } return pNum; } public static void main(String[] args) { System.out.println("■最初のデータベースの内容"); displayData(); //データ入力 int pNum = inputData(); try{ productDAO.delete(pNum); productDAO.finishTransaction(); System.out.println("■変更後データベースの内容"); displayData(); productDAO.finishTransaction(); }catch(SQLException e){ System.out.println("■入力された製品番号は存在しません"); e.printStackTrace(); } } }
▼データベースの指定
▼実行結果例
============== ■最初のデータベースの内容 番号: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 ■削除製品番号入力 製品番号入力: 105 ■変更後データベースの内容 番号:101 名前:Accort タイプ:sedan 価格:230 番号:102 名前:Accort Wagon タイプ:RV 価格:280 番号:103 名前:Insphire タイプ:sedan 価格:500 番号:104 名前:Hodyssey タイプ:RV 価格:280 番号:107 名前:Accort タイプ:sedan 価格:290 番号:108 名前:MarlX タイプ:sedan 価格:400 ==============