解答例 - 実習課題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();
}
}
}
▼データベースの指定

