解答例 - 実習課題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 ==============

