В этой статье описывается метод чтения Java Blob Blob Pictures из базы данных и их отображения. Поделитесь этим для вашей ссылки. Конкретный метод реализации следующим образом:
Первый метод:
Общий метод состоит в том, чтобы прочитать поток Blob из базы данных и написать его на страницу:
Кода -код следующим образом: Connection conn = dbmanager.getConnection ();
String sql = "Выберите изображение из учителя, где id = 1";
Подготовленное предприятие PS = NULL;
Результат RS = NULL;
InputStream IS = null;
OutputStream OS = null;
пытаться {
ps = conn.preprestatement (sql);
rs = ps.executequery ();
if (rs.next ()) {
is = rs.getbinarystream (1);
}
response.setContentType ("text/html");
OS = response.getOutputStream ();
int num;
byte buf [] = новый байт [1024];
while ((num = is.read (buf))! =-1) {
Os.Write (Buf, 0, Num);
}
} catch (sqlexception e) {
e.printstacktrace ();
}
пытаться {
is.close ();
os.close ();
rs.close ();
ps.close ();
} catch (sqlexception e) {
e.printstacktrace ();
}
На странице:
Скопируйте код следующим образом: <%
String path = request.getContextPath ();
String basePath = request.getScheme ()+": //"+request.getServername ()+":"+request.getServerport ()+path+"/";
%>
<img name = "pic" src = "<%= basePath+" Сервис/Загрузка AssStream "%>"/>
Сделать это.
Второй метод:
Весь процесс разделен на четыре шага: подключитесь к базе данных Oracle -> Прочитайте поле изображения Blob -> Масштабирование изображения -> отображение изображения на странице JSP.
Кода -копия выглядит следующим образом: импортировать java.sql.*;
импортировать java.io.*;
Импорт javax.imageio.imageio;
Импорт java.awt.image.bufferedImage;
импортировать java.awt.image.affineTransformop;
импортировать java.awt.geom.affineTransform;
открытый класс oraclequerybean {
частная финальная строка OracledRiverName = "oracle.jdbc.driver.oracledriver";
частное соединение myConnection = null;
частная строка strtabname;
частная строка StridName;
частная строка Strimgname;
public oraclequerybean () {
пытаться{
Class.forname (oracledrivername);
} catch (classnotfoundexception ex) {
System.out.println («Не удалось загрузить драйвер JDBC, причина:« + ex.getMessage ());
}
}
public connection getConnection () {
пытаться{
// имя пользователя + пароль;
// Читать информацию о базе данных из файла конфигурации
Getpara ogetpara = new getpara ();
String Strip = ogetPara.getPara ("serverip");
String strport = ogetpara.getpara ("port");
String strdbname = ogetpara.getpara ("dbname");
String struser = ogetpara.getpara ("user");
String strpassword = ogetpara.getpara ("пароль");
this.strtabname = ogetpara.getpara ("tableName");
this.stridname = ogetpara.getpara ("imgidname");
this.strimgname = ogetpara.getpara ("imgname");
String oracleurltoconnect = "jdbc: oracle: thin:@"+strip+":"+strport+":"+strdbname;
this.myconnection = Drivermanager.getConnection (OracleurltoConnect, Struser, StrpassWord);
} catch (Exception ex) {
System.out.println ("Не может получить соединение:" + ex.getMessage ());
System.out.println («Пожалуйста, проверьте, правильная ли информация о базе данных в файле конфигурации.»);
}
вернуть это.myConnection;
}
}
2. Прочитайте поле Blob
Добавьте функцию в класс OracleQuery, чтобы прочитать.
Кода кода выглядит следующим образом: public byte [] getimgbytebyid (string strid, int w, int h) {
//System.out.println("get img данные, который является идентификатором " + nid);
if (myconnection == null)
this.getConnection ();
byte [] data = null;
пытаться {
Утверждение stmt = myconnection.createStatement ();
Resultset myresultset = stmt.executequery ("select" + this.stridname + "from" + this.strtabname + "где" + this.stridname + "=" + strid);
StringBuffer MyStringBuffer = new StringBuffer ();
if (myresultset.next ()) {
java.sql.blob blob = myresultset.getblob (this.strimgname);
Inputstream instriam = blob.getBinaryStream ();
пытаться {
long nlen = blob.length ();
int nsize = (int) nlen;
//System.out.println("img размер данных: « + nsize);
data = новый байт [nsize];
instream.read (data);
instream.close ();
} catch (ioException e) {
System.out.println ("Не удалось получить данные изображения, причина:" + e.getmessage ());
}
data = changeImgsize (data, w, h);
}
System.out.println (mystringbuffer.tostring ());
myConnection.commit ();
myconnection.close ();
} catch (sqlexception ex) {
System.out.println (ex.getMessage ());
}
вернуть данные;
}
3. Увеличьте картинку
Поскольку размер изображения может быть непоследовательным, но размер вывода на странице должен быть объединен, функция должна быть добавлена в класс OracleQuery, чтобы масштабировать.
Копия кода выглядит следующим образом: Private Byte [] changeImgSize (byte [] data, int nw, int nh) {
байт [] newdata = null;
пытаться{
BufferedImage bis = imageio.read (new BytearrayinputStream (data));
int w = bis.getWidth ();
int h = bis.getheight ();
Double sx = (двойной) NW / W;
двойной sy = (двойной) NH / H;
AffineTransform Transform = new AffineTransform ();
Transform.SetToscale (SX, SY);
AffineTransformop ato = new AffineTransformop (Transform, NULL);
// оригинальный цвет
BufferedImage Bid = New BufferedImage (NW, NH, BufferedImage.Type_3byte_bgr);
ato.filter (bis, bid);
// конвертировать в байт -байт
BytearRayOutputStream BAOS = новый BytearRayOutputStream ();
Imageio.write (Bid, "jpeg", Baos);
newdata = baos.tobytearray ();
} catch (ioException e) {
e.printstacktrace ();
}
вернуть Ньюдату;
}
4. Отображение на странице.
Скопируйте код следующим образом: < %@ page language = "java" contentType = "text/html ;; charset = gbk" %>
<jsp: usebean id = "orclequery" scope = "page" />
<%
response.setContentType ("Image/jpeg");
// ID изображения в базе данных
String strid = request.getParameter ("id");
// в миниатюре или увеличить ширину картинки
String strwidth = request.getParameter ("w");
// до миниатюры или увеличить высоту картинки
String strheight = request.getParameter ("h");
byte [] data = null;
if (strid! = null) {
int nwith = integer.parseint (strwidth);
int nheight = integer.parseint (strheight);
// Получить байтовые данные изображения
data = orclequery.getimgbytebyid (strid, nwith, nheight);
ServletOutputStream Op = response.getOutputStream ();
op.write (data, 0, data.length);
op.close ();
op = null;
response.flushbuffer ();
// очистить выходной поток, чтобы предотвратить захват исключений во время выпуска
out.clear ();
out = pagecontext.pushbody ();
}
%>
5. Общий код класса запросов Oraclequerybean
Код файла oraclequerybean.java выглядит следующим образом:
Кода -копия выглядит следующим образом: импортировать java.sql.*;
импортировать java.io.*;
Импорт javax.imageio.imageio;
Импорт java.awt.image.bufferedImage;
импортировать java.awt.image.affineTransformop;
импортировать java.awt.geom.affineTransform;
открытый класс oraclequerybean {
частная финальная строка OracledRiverName = "oracle.jdbc.driver.oracledriver";
частное соединение myConnection = null;
частная строка strtabname;
частная строка StridName;
частная строка Strimgname;
public oraclequerybean () {
пытаться{
Class.forname (oracledrivername);
} catch (classnotfoundexception ex) {
System.out.println («Не удалось загрузить драйвер JDBC, причина:« + ex.getMessage ());
}
}
public connection getConnection () {
пытаться{
// имя пользователя + пароль;
// Читать информацию о базе данных из файла конфигурации
Getpara ogetpara = new getpara ();
String Strip = ogetPara.getPara ("serverip");
String strport = ogetpara.getpara ("port");
String strdbname = ogetpara.getpara ("dbname");
String struser = ogetpara.getpara ("user");
String strpassword = ogetpara.getpara ("пароль");
this.strtabname = ogetpara.getpara ("tableName");
this.stridname = ogetpara.getpara ("imgidname");
this.strimgname = ogetpara.getpara ("imgname");
String oracleurltoconnect = "jdbc: oracle: thin:@"+strip+":"+strport+":"+strdbname;
this.myconnection = Drivermanager.getConnection (OracleurltoConnect, Struser, StrpassWord);
} catch (Exception ex) {
System.out.println ("Не может получить соединение:" + ex.getMessage ());
System.out.println («Пожалуйста, проверьте, правильная ли информация о базе данных в файле конфигурации.»);
}
вернуть это.myConnection;
}
public byte [] getimgbytebyid (string strid, int w, int h) {
//System.out.println("get img данные, который является идентификатором " + nid);
if (myconnection == null)
this.getConnection ();
byte [] data = null;
пытаться {
Утверждение stmt = myconnection.createStatement ();
Resultset myresultset = stmt.executequery ("select" + this.stridname + "from" + this.strtabname + "где" + this.stridname + "=" + strid);
StringBuffer MyStringBuffer = new StringBuffer ();
if (myresultset.next ()) {
java.sql.blob blob = myresultset.getblob (this.strimgname);
Inputstream instriam = blob.getBinaryStream ();
пытаться {
long nlen = blob.length ();
int nsize = (int) nlen;
//System.out.println("img размер данных: « + nsize);
data = новый байт [nsize];
instream.read (data);
instream.close ();
} catch (ioException e) {
System.out.println ("Не удалось получить данные изображения, причина:" + e.getmessage ());
}
data = changeImgsize (data, w, h);
}
System.out.println (mystringbuffer.tostring ());
myConnection.commit ();
myconnection.close ();
} catch (sqlexception ex) {
System.out.println (ex.getMessage ());
}
вернуть данные;
}
public byte [] getimgbytebyid (String Strid) {
//System.out.println("get img данные, который является идентификатором " + nid);
if (myconnection == null)
this.getConnection ();
byte [] data = null;
пытаться {
Утверждение stmt = myconnection.createStatement ();
Resultset myresultset = stmt.executequery ("select" + this.stridname + "from" + this.strtabname + "где" + this.stridname + "=" + strid);
StringBuffer MyStringBuffer = new StringBuffer ();
if (myresultset.next ()) {
java.sql.blob blob = myresultset.getblob (this.strimgname);
Inputstream instriam = blob.getBinaryStream ();
пытаться {
long nlen = blob.length ();
int nsize = (int) nlen;
data = новый байт [nsize];
instream.read (data);
instream.close ();
} catch (ioException e) {
System.out.println ("Не удалось получить данные изображения, причина:" + e.getmessage ());
}
}
System.out.println (mystringbuffer.tostring ());
myConnection.commit ();
myconnection.close ();
} catch (sqlexception ex) {
System.out.println (ex.getMessage ());
}
вернуть данные;
}
Частный байт [] изменять (byte [] data, int nw, int nh) {
байт [] newdata = null;
пытаться{
BufferedImage bis = imageio.read (new BytearrayinputStream (data));
int w = bis.getWidth ();
int h = bis.getheight ();
Double sx = (двойной) NW / W;
двойной sy = (двойной) NH / H;
AffineTransform Transform = new AffineTransform ();
Transform.SetToscale (SX, SY);
AffineTransformop ato = new AffineTransformop (Transform, NULL);
// оригинальный цвет
BufferedImage Bid = New BufferedImage (NW, NH, BufferedImage.Type_3byte_bgr);
ato.filter (bis, bid);
// конвертировать в байт -байт
BytearRayOutputStream BAOS = новый BytearRayOutputStream ();
Imageio.write (Bid, "jpeg", Baos);
newdata = baos.tobytearray ();
} catch (ioException e) {
e.printstacktrace ();
}
вернуть Ньюдату;
}
}
Ниже приведен мой код копии дела для хранения изображений Blob Blob следующим образом: Импорт java.sql.*;
импортировать java.io.*;
открытый класс insertphoto {
public static void main (string [] args) бросает исключение {
Class.forname ("com.mysql.jdbc.driver");
Connection con = drivermanager.getConnection ("jdbc: mysql: //127.0.0.1/wiseweb? User = root & password = root");
Файл f = новый файл ("E: /123.jpg");
FileInputStream fis = new FileInputStream (f);
String sql = "вставьте в фото (фото, фотонаме) значения (?,?)";
Подготовленное Statatement pstmt = con.prepareStatement (SQL);
pstmt.setbinarystream (1, fis, (int) f.length ());
PSTMT.SetString (2, «тестовая картина»);
pstmt.executeupdate ();
fis.close ();
pstmt.close ();
con.close ();
}
}
Кода -копия выглядит следующим образом: импортировать java.awt.image.bufferedimage;
Импорт java.io.bufferedinputstream;
импортировать java.io.ioexception;
импортировать java.io.inputstream;
импортировать java.io.outputstream;
Импорт java.sql.connection;
Импорт java.sql.drivermanager;
импортировать java.sql.resultset;
Импорт java.sql.sqlexception;
Импорт java.sql.statement;
Импорт javax.imageio.imageio;
Импорт javax.servlet.http.httpservlet;
Импорт javax.servlet.http.httpservletrequest;
Импорт javax.servlet.http.httpservletresponse;
Импорт com.sun.image.codec.jpeg.jpegcodec;
Импорт com.sun.image.codec.jpeg.jpegimageencoder;
public class readphoto расширяет httpservlet {
Частный статический конечный длинный SerialVersionuid = 1L;
public void Doget (httpservletrequest, httpservletresponse response) {
if (request.getParameter ("id")! = null) {
response.setContentType ("Image/jpeg");
пытаться {
InputStream IS = Query_getPhotoImageBlob (integer.parseint (request.getParameter ("id"))));
if (is! = null) {
is = new BufferedInputStream (IS);
BufferedImage bi = imageio.read (is);
OutputStream OS = response.getOutputStream ();
Jpegimageencoder encoder = jpegcodec.createjpegenceder (os);
encoder.encode (bi);
os.close ();
is.close ();
}
} catch (ioException e) {
e.printstacktrace ();
} catch (numberFormateXception e) {
// Todo Auto Generated Catch Blach
e.printstacktrace ();
} catch (classnotfoundexception e) {
// Todo Auto Generated Catch Blach
e.printstacktrace ();
} catch (sqlexception e) {
// Todo Auto Generated Catch Blach
e.printstacktrace ();
}
}
}
Общественный статический inputstream Query_getPhotoImageBlob (int id) бросает classnotfoundexception, sqlexception {
String sql = "Выберите фото на фото, где id ="+id;
Соединение con = null;
Утверждение stmt = null;
Результат RS = NULL;
Inputstream result = null;
пытаться {
Class.forname ("com.mysql.jdbc.driver");
con = drivermanager.getConnection ("jdbc: mysql: //127.0.0.1/wiseweb? user = root & password = root");
stmt = con.createStatement ();
rs = stmt.executequery (sql);
if (rs.next ())
result = rs.getblob ("photo"). getBinaryStream ();
} catch (sqlexception e) {
// todo: обрабатывать исключение
System.err.println (e.getMessage ());
} окончательно{
rs.close ();
stmt.close ();
con.close ();
}
результат возврата;
}
}
JSP отображает код кода копии следующим образом: <img src = "<%= basePath%>/Genimage? ID = 3"/>
Код копии настроен в web.xml следующим образом: <servlet>
<servlet-name> Genimage </servlet-name>
<serlet-class> readphoto </servlet-class>
</Сервлет>
<Сервлетовое картирование>
<servlet-name> Genimage </servlet-name>
<Url-pattern>/Genimage </url-pattern>
</servlet-mapping>
Я надеюсь, что эта статья будет полезна для всех Java Programming.