サーブレットの様々なサンプル - Oracle の BLOB 型の使用 -
技術情報 TOP へ

ここでは、Java サーブレットに関する簡単なサンプルを記述いたします。

( 1 ) テーブルの作成
( 2 ) 画像から BLOB 型のデータの挿入 ( INSERT 文発行 )
( 3 ) BLOB 型のデータ取得、画像出力 ( SELECT 文発行 )



( 1 ) テーブルの作成

データベースに画像データを保存するテーブルを作成します。

テーブル名:
imgtest

カラムの説明:
id プライマリーキー
filename     画像データの基のファイル名
img 画像データ


create table imgtable ( 
	id varchar(4) not null ,
	filename varchar(20) not null ,
	img BLOB ,
	primary key ( id ) 
); 
web.xml に以下の内容を記述します。

web.xml の記述例:
<web-app>
  <!--ここから-->
	<servlet>
	      <servlet-name>SampleBlobServlet1</servlet-name>
	      <servlet-class>SampleBlobServlet1</servlet-class>
	</servlet> 
	<servlet>
	      <servlet-name>SampleBlobServlet2</servlet-name>
	      <servlet-class>SampleBlobServlet2</servlet-class>
	</servlet>   
	<servlet-mapping>
	      <servlet-name>SampleBlobServlet1</servlet-name>
	      <url-pattern>/SampleBlobServlet1</url-pattern>
	</servlet-mapping>   
	<servlet-mapping>
	      <servlet-name>SampleBlobServlet2</servlet-name>
	      <url-pattern>/SampleBlobServlet2</url-pattern>
	</servlet-mapping>  
  <!--ここまで-->
( 2 ) 画像から BLOB 型のデータの挿入 ( INSERT 文発行 )

以下のサンプルでは "C:/tmp/img/jet.jpg" から画像データを取得して、 imgtable に挿入します。

Oracle の JDBC ドライバを /WEB-INF/lib に配置して実行してください。

ファイル名:SampleBlobServlet1.java
import javax.servlet.http.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;


import javax.servlet.ServletException;

/**
 * 
 * 画像ファイルをバイナリデータとしてデータベースに挿入します。
 *  
 * 
 * プログラム内のデータベース接続用パラメータやファイル名等は
 * 環境に合わせてご設定ください。
 *
 */
public class SampleBlobServlet1 extends HttpServlet {
		  

	public void doGet(HttpServletRequest request, 
                      HttpServletResponse response) 
                          throws ServletException, IOException {
		  
	  /* ユーザ名 */
	  String user = "scott";
	  /* パスワード */
	  String pass = "tiger";
	  /* サーバ名 */
	  String servername = "***.***.***.***";
	  /* SID */
	  String sid = "sid";
	  
	  /* 挿入するファイル */
	  String fileName = "C:/tmp/img/jet.jpg";
	  
	  PrintWriter out = null;
	  Connection conn = null;
	  PreparedStatement  stmt = null;
		 		  		  
	  try {  		
		
		Class.forName ("oracle.jdbc.driver.OracleDriver");	 
		conn = DriverManager.getConnection 
		("jdbc:oracle:thin:@" + servername 
				+ ":1521:" + sid,user,pass);	
		
		File file = new File(fileName);
		
		StringBuffer sb = 
			new StringBuffer(
				"INSERT INTO imgtable (id,fileName,img)");
		
		sb.append("VALUES(?,?,?)");				
							
		stmt = conn.prepareStatement(sb.toString());

		stmt.setString(1,"01");
		stmt.setString(2,file.getName());
		stmt.setBinaryStream(3,new FileInputStream(file), 
				(int)file.length());

		int cnt = stmt.executeUpdate();
		
		conn.commit();
		
		/* HTML 出力 */
		response.setContentType(
				"text/html; charset=Shift_JIS");
		out = response.getWriter();				
		out.println("<html>");
		out.println("<head>");
		out.println("<title>sample</title>");
		out.println("</head>"); 
		out.println("<body>");   
		out.println("<h2>Insert Image count: ");
		out.println(String.valueOf(cnt));
		out.println("</h2>");
		out.println("</body>");
		out.println("</html>");
		out.flush();
   
		} catch ( Exception e){
			e.printStackTrace();	
		}
		finally{	
		 try {
		  if(conn != null){conn.close();}
		  if(stmt != null){stmt.close();}	
		  if(out != null){out.close();}
		 } catch (Exception e) {	
		  e.printStackTrace();
		 }
		}	   	   
	}
}
( 3 ) BLOB 型のデータ取得、画像出力 ( SELECT 文発行 )

以下のサンプルでは imgtable から画像データを取得して出力表示します。

Oracle の JDBC ドライバを /WEB-INF/lib に配置して実行してください。

ファイル名:SampleBlobServlet2.java


import javax.servlet.*;
import javax.servlet.http.*;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;


import javax.servlet.ServletException;

/**
 * 
 * 画像データをデータベースから取得し、
 * 表示します。
 * 
 * プログラム内のデータベース接続用パラメータやファイル名等は環境に
 * 合わせてご設定ください。
 *
 */
public class SampleBlobServlet2 extends HttpServlet {
	
	public void doGet(HttpServletRequest request, 
                      HttpServletResponse response) 
                          throws ServletException, IOException {
		  
	  /* ユーザ名 */
	  String user = "scott";
	  /* パスワード */
	  String pass = "tiger";
	  /* サーバ名 */
	  String servername = "***.***.***.***";
	  /* SID */
	  String sid = "sid";
			  
	  ServletOutputStream out = null;
	  Connection conn = null;
	  PreparedStatement stmt = null;
	  ResultSet rset = null; 
	  InputStream inputStream = null;
	  BufferedInputStream bufferedInputStream = null;
	  
	  int iData = 0;	
		  
	  try {  		
			
		Class.forName ("oracle.jdbc.driver.OracleDriver");	 
		conn = DriverManager.getConnection 
		("jdbc:oracle:thin:@" + servername 
			+ ":1521:" + sid,user,pass);	
						
		stmt = conn.prepareStatement("" +
			"select img from imgtable Where id = ?");

		stmt.setString(1,"01");
					
		rset = stmt.executeQuery();	
				
	    while (rset.next()) {
		   Blob blob = (Blob) rset.getBlob(1);	
		   inputStream = blob.getBinaryStream();
	    }				  

	   bufferedInputStream = 
		new BufferedInputStream(inputStream);
	   
	   response.setContentType("image/jpeg");
	   
	   out = response.getOutputStream();
        
	   /* 画像を書き出します。*/
	   while ((iData = bufferedInputStream.read()) != -1) {
	       out.write(iData);
	   }
   
	 } catch ( Exception e){
		e.printStackTrace();	
	 }
	 finally{
	  try {
		if(conn != null){conn.close();}
		if(stmt != null){stmt.close();}			
		if(rset != null){ rset.close();	}
		if(inputStream != null){inputStream.close();}
		if(bufferedInputStream != null)
		{bufferedInputStream.close();}
		if(out != null){out.close();}				
	  } catch (Exception e) {					
		e.printStackTrace();
	  }
	 }		   
   }
}



技術情報 TOP へ


Google
WWW を検索 whitemark.co.jp を検索
[ 株式会社ホワイトマーク TOP ]   [ 免責事項 ]

Copyright © 2006 by WhiteMark, All rights Reserved. Last Modified: 2006/05