| サーブレットの様々なサンプル - Oracle の BLOB 型の使用 - | ||||||||
|
技術情報 TOP へ
|
||||||||
|
|
||||||||
|
ここでは、Java サーブレットに関する簡単なサンプルを記述いたします。
|
||||||||
|
||||||||
|
|
||||||||
|
( 1 ) テーブルの作成 データベースに画像データを保存するテーブルを作成します。
テーブル名:
|
||||||||
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 へ
|
||||||||
|
|
||||||||
|
|
||||||||
| [ 株式会社ホワイトマーク TOP ] [ 免責事項 ] |