背景! jsp+mysql データベースフィールドを保存するには mysql の longblob タイプを使用することを忘れないでください。デフォルトの blob サイズでは十分ではありません
: id (char) pic (longblob)
転載の際は、知人と協力して行いました。
元の操作 BLOB を完成させる
場合は、BLOB を空の値にする必要があります。これは面倒です。「 http://www.w3. 」ページ
を
使用する必要はありません
。org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<html xmlns=" http://www.w3.org/1999/xhtml ">
<頭>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>無題のドキュメント</title>
</head>
<本文>
<form action="testblob.jsp" method="post" >
<テーブル幅="291" ボーダー="1">
<tr>
<td width="107">ID </td>
<td width="168"><input name="id" type="text" /></td>
</tr>
<tr>
<td>ファイル</td>
<td><input name="file" type="file" /></td>
</tr>
<tr>
<td><input type="submit" value="Submit"/></td>
</tr>
</テーブル>
</form>
</body>
</html>
************************************************* * *************
testblob.jsp
<%@ page contentType="text/html;charset=gb2312"%>
<%@ ページインポート="java.sql.*" %>
<%@ page import="java.util.*"%>
<%@ page import="java.text.*"%>
<%@ page import="java.io.*"%>
<html xmlns=" http://www.w3.org/1999/xhtml ">
<頭>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>無題のドキュメント</title>
</head>
<本文>
<%
文字列 id=request.getParameter("id");
文字列ファイル=request.getParameter("ファイル");
out.print(id);
out.print(ファイル);
FileInputStream str=新しい FileInputStream(ファイル);
out.print(str.available());
java.sql.Connection接続;
java.lang.String strConn;
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
conn= java.sql.DriverManager.getConnection("jdbc:mysql://localhost/test","root","");
文字列 sql="テスト(id,pic) 値(?,?) に挿入";
PreparedStatement pstmt=conn.prepareStatement(sql);
pstmt.setString(1,id);
pstmt.setBinaryStream(2,str,str.available());
pstmt.execute();
out.println("成功しました。画像の挿入に成功しました");
pstmt.close();
%>
<a href="readblob.jsp">画像を表示</a>
<a href="postblob.html">返品</a>
</body>
</html>
********************************************* **********
readblob.jsp
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*, javax.sql.*" %>
<%@ page import="java.util.*"%>
<%@ page import="java.text.*"%>
<%@ page import="java.io.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<html xmlns=" http://www.w3.org/1999/xhtml ">
<頭>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>無題のドキュメント</title>
</head>
<body>
<%
java.sql.Connection接続;
結果セット rs=null;
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
conn= java.sql.DriverManager.getConnection("jdbc:mysql://localhost/test","root","");
ステートメント stmt=conn.createStatement();
rs=stmt.executeQuery("select * from test where id='1'");
if(rs.next())
{
Blob b = rs.getBlob("pic");
int サイズ =(int)b.length();
out.print(サイズ);
入力ストリーム in=b.getBinaryStream();
byte[] by= 新しいバイト[サイズ];
response.setContentType("画像/jpeg");
ServletOutputStream sos = 応答.getOutputStream();
int bytesRead = 0;
while ((bytesRead = in.read(by)) != -1) {
sos.write(by, 0, bytesRead);
}
in.close();
sos.flush();
}
%>
</body>
</html>
************************************************* * ******************
注: sos.write(by, 0, bytesRead); を使用する場合、このメソッドは、入力ストリームの内容を新しいページに出力します
。このページに出力される他のコンテンツである場合は、上記のメソッドを bytesRead = in.read(by)); に変更して
から、 out.print(new String(by)) メソッドを使用して結果を出力するだけです。ここで注意 by.toString()メソッドは使用できません。このメソッドは出力するコンテンツのメモリアドレスを返します。 mysql には blob textarea タイプがあり、そのサイズは 66536 です。基本的には、小さなものを入れるのに十分です (笑)。しかし、デジタル写真がますます大きくなっているため、サイズは 4g しか使用できません。映画を再生するのに十分です。