解答例 - 実習課題1 - 4.ラージオブジェクト
(実習課題1)
以下のプログラムを作成しなさい。
- 「product_photo」テーブルに画像ファイルを格納するコンソールプログラム。
- プログラムの引数は、製品番号と画像ファイル名。
- 格納されたデータが、指定したファイルのデータと同じである事を確認する事。
解答例
▼データベースアクセス用クラスのソース
package com.techscore.jdbc.chapter4.exercise1; /** * ProductPhotoDAO.java * TECHSCORE JDBC4章 実習課題1 * * Copyright (c) 2004 Four-Dimensional Data, Inc. */ import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.DriverManager; import java.io.FileInputStream; public class ProductPhotoDAO{ 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 void insertImage(int pNum,FileInputStream fin, int length) throws SQLException,ClassNotFoundException{ conn = getConnection(); final String sql = "insert into product_photo values(?,?)"; statement = conn.prepareStatement(sql); statement.setInt(1,pNum); statement.setBinaryStream(2, fin, length); statement.executeUpdate(); conn.commit(); } public void finishTransaction() throws SQLException{ try{ statement.close(); }finally{ if (conn != null){ conn.close(); } } } }
▼データ挿入測定クラスのソース
package com.techscore.jdbc.chapter4.exercise1; /** * InsertImageData.java * TECHSCORE JDBC4章 実習課題1 * * Copyright (c) 2004 Four-Dimensional Data, Inc. */ import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.sql.SQLException; public class InsertImageData { public static void main(String[] args) { try { ProductPhotoDAO photoDAO = new ProductPhotoDAO(); int pNum =Integer.parseInt(args[0]); String fileName = args[1]; File file = new File(fileName); FileInputStream input = new FileInputStream(file); photoDAO.insertImage(pNum,input,(int)file.length()); input.close(); photoDAO.finishTransaction(); }catch(SQLException e){ e.printStackTrace(); }catch(ClassNotFoundException e){ e.printStackTrace(); }catch (ArrayIndexOutOfBoundsException e) { System.out.println("Usage:java InsertImageData [製品番号] [画像ファイル名]"); }catch(FileNotFoundException e){ e.printStackTrace(); }catch (IOException e) { e.printStackTrace(); } } }
▼データベースの指定