Artikel ini menjelaskan metode Java Reading Blob Object Pictures dari database dan menampilkannya. Bagikan untuk referensi Anda. Metode implementasi spesifik adalah sebagai berikut:
Metode pertama:
Metode umum adalah membacakan aliran gumpalan dari database dan menulisnya ke halaman:
Salinan kode adalah sebagai berikut: koneksi conn = dbManager.getConnection ();
String sql = "Pilih gambar dari guru di mana id = 1";
Disiapkan ps = null;
Hasil rs = null;
InputStream adalah = null;
OutputStream OS = null;
mencoba {
ps = conn.preparestatement (SQL);
rs = ps.executeQuery ();
if (rs.next ()) {
is = rs.getBinaryStream (1);
}
response.setContentType ("Teks/html");
os = response.getoutputStream ();
int num;
byte buf [] = byte baru [1024];
while ((num = is.read (buf))! =-1) {
os.write (buf, 0, num);
}
} catch (sqlexception e) {
e.printstacktrace ();
}
mencoba {
is.close ();
os.close ();
rs.close ();
ps.close ();
} catch (sqlexception e) {
e.printstacktrace ();
}
Di halaman:
Salin kode sebagai berikut: <%
String path = request.getContextPath ();
String basePath = request.getScheme ()+": //"+request.getServerName ()+":"+request.getServerport ()+path+"/";
%>
<img name = "pic" src = "<%= basepath+" servlet/downloadAsstream "%>"/>
Menyelesaikannya.
Metode kedua:
Seluruh proses dibagi menjadi empat langkah: Hubungkan ke database Oracle -> Baca bidang gambar Blob -> Menskalakan gambar -> Menampilkan gambar pada halaman JSP.
Salinan kode adalah sebagai berikut: impor java.sql.*;
impor java.io.*;
impor javax.imageio.imageio;
impor java.awt.image.bufferedimage;
impor java.awt.image.affinetransformop;
impor java.awt.geom.affinetransform;
oraclequerybean kelas publik {
string final pribadi oracledRiverName = "oracle.jdbc.driver.oracledriver";
koneksi pribadi myconnection = null;
string pribadi strtabname;
String stridname pribadi;
String strimGname pribadi;
oraclequerybean publik () {
mencoba{
Class.forname (OracledRiverName);
} catch (classnotfoundException ex) {
System.out.println ("Gagal memuat driver JDBC, alasan:" + ex.getMessage ());
}
}
Koneksi publik getConnection () {
mencoba{
// Nama Pengguna + Kata Sandi;
// Baca informasi database dari file konfigurasi
Getpara ogetpara = baru 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 ("kata sandi");
this.strtabName = ogetpara.getpara ("Tablename");
this.stridName = ogetpara.getpara ("imgidname");
this.strimgname = ogetpara.getpara ("imgname");
String oracleUrlToconnect = "jdbc: oracle: tipis:@"+strip+":"+strport+":"+strdbname;
this.myconnection = driverManager.getConnection (oracleurltoconnect, struser, strpassword);
} catch (Exception ex) {
System.out.println ("tidak bisa mendapatkan koneksi:" + ex.getMessage ());
System.out.println ("Silakan periksa apakah informasi database dalam file konfigurasi sudah benar.");
}
kembalikan ini.MyConnection;
}
}
2. Baca bidang Blob
Tambahkan fungsi ke kelas OracleQueryBean untuk dibaca.
Salinan kode adalah sebagai berikut: byte publik [] getimgbytebyid (string strid, int w, int h) {
//System.out.println("get IMG data ID yang " + nid);
if (myconnection == null)
this.getConnection ();
byte [] data = null;
mencoba {
Pernyataan stmt = myconnection.createStatement ();
Hasil myResultSet = stmt.executeQuery ("pilih" + this.stridName + "dari" + this.strtabName + "di mana" + this.stridName + "=" + strid);
StringBuffer myStringBuffer = stringBuffer baru ();
if (myresultset.next ()) {
java.sql.blob blob = myresultset.getBlob (this.strimgname);
InputStream instream = blob.getBinaryStream ();
mencoba {
long nlen = blob.length ();
int nsize = (int) nlen;
//System.out.println("Img ukuran data adalah: " + nsize);
data = byte baru [nsize];
instream.read (data);
instream.close ();
} catch (ioException e) {
System.out.println ("Gagal mendapatkan data gambar, alasan:" + e.getMessage ());
}
data = changeImgsize (data, w, h);
}
System.out.println (myStringBuffer.toString ());
MyConnection.Commit ();
myconnection.close ();
} catch (sqlexception ex) {
System.out.println (ex.getMessage ());
}
pengembalian data;
}
3. Zoom gambarnya
Karena ukuran gambar mungkin tidak konsisten, tetapi ukuran output di halaman perlu disatukan, fungsi perlu ditambahkan ke kelas OracleQueryBean untuk skala.
Salinan kode adalah sebagai berikut: byte pribadi [] changeImgsize (byte [] data, int nw, int nh) {
byte [] newData = null;
mencoba{
BufferedImage bis = imageIo.read (new ByteArrayInputStream (data));
int w = bis.getWidth ();
int h = bis.getHeight ();
ganda sx = (ganda) nw / w;
ganda sy = (ganda) nh / h;
Affinetransform transform = affinetransform baru ();
transform.setoscale (SX, SY);
Affinetransformop ato = affinetransformop baru (transform, null);
// warna asli
BufferedImage BID = BufferedImage baru (NW, NH, bufferedImage.type_3byte_bgr);
ato.filter (bis, tawaran);
// Konversi ke byte byte
BytearrayoutputStream baos = bytearrayoutputStream baru ();
Imageo.write (BID, "JPEG", BAOS);
newData = Baos.tobyteArray ();
} catch (ioException e) {
e.printstacktrace ();
}
mengembalikan newdata;
}
4. Tampilkan halaman halaman.
Salin kode sebagai berikut: < %@ halaman bahasa = "java" contentType = "text/html ;; charset = gbk" %>
<jsp: useBean id = "orcleQuery" scope = "page" />
<%
response.setContentType ("Image/JPEG");
// ID gambar dalam database
String strid = request.getParameter ("id");
// Untuk thumbnail atau memperbesar lebar gambar
String strwidth = request.getParameter ("w");
// Untuk thumbnail atau memperbesar ketinggian gambar
String strheight = request.getParameter ("h");
byte [] data = null;
if (strid! = null) {
int nwith = integer.parseint (strwidth);
int nheight = integer.parseint (strheight);
// Dapatkan data byte gambar
data = orclequery.getImgbyTebyId (strid, nwith, nheight);
ServETOutputStream op = response.getOutputStream ();
op.write (data, 0, data.length);
op.close ();
op = null;
response.flushbuffer ();
// Bersihkan aliran output untuk mencegah penangkapan pengecualian selama rilis
out.clear ();
out = pageContext.pushbody ();
}
%>
5. Kode keseluruhan kelas kueri OracleQueryBean
Kode file oraclequerybean.java adalah sebagai berikut:
Salinan kode adalah sebagai berikut: impor java.sql.*;
impor java.io.*;
impor javax.imageio.imageio;
impor java.awt.image.bufferedimage;
impor java.awt.image.affinetransformop;
impor java.awt.geom.affinetransform;
oraclequerybean kelas publik {
string final pribadi oracledRiverName = "oracle.jdbc.driver.oracledriver";
koneksi pribadi myconnection = null;
string pribadi strtabname;
String stridname pribadi;
String strimGname pribadi;
oraclequerybean publik () {
mencoba{
Class.forname (OracledRiverName);
} catch (classnotfoundException ex) {
System.out.println ("Gagal memuat driver JDBC, alasan:" + ex.getMessage ());
}
}
Koneksi publik getConnection () {
mencoba{
// Nama Pengguna + Kata Sandi;
// Baca informasi database dari file konfigurasi
Getpara ogetpara = baru 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 ("kata sandi");
this.strtabName = ogetpara.getpara ("Tablename");
this.stridName = ogetpara.getpara ("imgidname");
this.strimgname = ogetpara.getpara ("imgname");
String oracleUrlToconnect = "jdbc: oracle: tipis:@"+strip+":"+strport+":"+strdbname;
this.myconnection = driverManager.getConnection (oracleurltoconnect, struser, strpassword);
} catch (Exception ex) {
System.out.println ("tidak bisa mendapatkan koneksi:" + ex.getMessage ());
System.out.println ("Silakan periksa apakah informasi database dalam file konfigurasi sudah benar.");
}
kembalikan ini.MyConnection;
}
byte publik [] getimgbytebyid (string strid, int w, int h) {
//System.out.println("get IMG data ID yang " + nid);
if (myconnection == null)
this.getConnection ();
byte [] data = null;
mencoba {
Pernyataan stmt = myconnection.createStatement ();
Hasil myResultSet = stmt.executeQuery ("pilih" + this.stridName + "dari" + this.strtabName + "di mana" + this.stridName + "=" + strid);
StringBuffer myStringBuffer = stringBuffer baru ();
if (myresultset.next ()) {
java.sql.blob blob = myresultset.getBlob (this.strimgname);
InputStream instream = blob.getBinaryStream ();
mencoba {
long nlen = blob.length ();
int nsize = (int) nlen;
//System.out.println("Img ukuran data adalah: " + nsize);
data = byte baru [nsize];
instream.read (data);
instream.close ();
} catch (ioException e) {
System.out.println ("Gagal mendapatkan data gambar, alasan:" + e.getMessage ());
}
data = changeImgsize (data, w, h);
}
System.out.println (myStringBuffer.toString ());
MyConnection.Commit ();
myconnection.close ();
} catch (sqlexception ex) {
System.out.println (ex.getMessage ());
}
pengembalian data;
}
byte publik [] getimgbytebyid (string strid) {
//System.out.println("get IMG data ID yang " + nid);
if (myconnection == null)
this.getConnection ();
byte [] data = null;
mencoba {
Pernyataan stmt = myconnection.createStatement ();
Hasil myResultSet = stmt.executeQuery ("pilih" + this.stridName + "dari" + this.strtabName + "di mana" + this.stridName + "=" + strid);
StringBuffer myStringBuffer = stringBuffer baru ();
if (myresultset.next ()) {
java.sql.blob blob = myresultset.getBlob (this.strimgname);
InputStream instream = blob.getBinaryStream ();
mencoba {
long nlen = blob.length ();
int nsize = (int) nlen;
data = byte baru [nsize];
instream.read (data);
instream.close ();
} catch (ioException e) {
System.out.println ("Gagal mendapatkan data gambar, alasan:" + e.getMessage ());
}
}
System.out.println (myStringBuffer.toString ());
MyConnection.Commit ();
myconnection.close ();
} catch (sqlexception ex) {
System.out.println (ex.getMessage ());
}
pengembalian data;
}
byte pribadi [] changeImgsize (data byte [], int nw, int nh) {
byte [] newData = null;
mencoba{
BufferedImage bis = imageIo.read (new ByteArrayInputStream (data));
int w = bis.getWidth ();
int h = bis.getHeight ();
ganda sx = (ganda) nw / w;
ganda sy = (ganda) nh / h;
Affinetransform transform = affinetransform baru ();
transform.setoscale (SX, SY);
Affinetransformop ato = affinetransformop baru (transform, null);
// warna asli
BufferedImage BID = BufferedImage baru (NW, NH, bufferedImage.type_3byte_bgr);
ato.filter (bis, tawaran);
// Konversi ke byte byte
BytearrayoutputStream baos = bytearrayoutputStream baru ();
Imageo.write (BID, "JPEG", BAOS);
newData = Baos.tobyteArray ();
} catch (ioException e) {
e.printstacktrace ();
}
mengembalikan newdata;
}
}
Di bawah ini adalah kode salinan kasus saya untuk menyimpan gambar blob membaca sebagai berikut: impor java.sql.*;
impor java.io.*;
Insertphoto kelas publik {
public static void main (string [] args) melempar pengecualian {
Class.forname ("com.mysql.jdbc.driver");
Koneksi con = driverManager.getConnection ("jdbc: mysql: //127.0.0.1/wiseweb? User = root & password = root");
File f = file baru ("e: /123.jpg");
FileInputStream fis = FileInputStream baru (f);
String sql = "masukkan ke dalam foto (foto, fotoname) nilai (?,?)";
PreparedStatement pStmt = con.preparestatement (sql);
pstmt.setBinaryStream (1, fis, (int) f.length ());
pstmt.setstring (2, "gambar uji");
PSTMT.ExecuteUpdate ();
fis.close ();
pstmt.close ();
con.close ();
}
}
Salinan kode adalah sebagai berikut: impor java.awt.image.bufferedImage;
impor java.io.bufferedInputStream;
impor java.io.ioException;
impor java.io.inputstream;
impor java.io.outputStream;
impor java.sql.connection;
impor java.sql.driverManager;
impor java.sql.Resultset;
impor java.sql.sqlexception;
impor java.sql.statement;
impor javax.imageio.imageio;
impor javax.servlet.http.httpservlet;
impor javax.servlet.http.httpservletRequest;
impor javax.servlet.http.httpservletResponse;
impor com.sun.image.codec.jpeg.jpegcodec;
impor com.sun.image.codec.jpeg.jpegimageencoder;
ReadPhoto kelas publik memperluas httpservlet {
private static final long serialversionuid = 1L;
public void doGet (permintaan httpservletRequest, respons httpservletResponse) {
if (request.getParameter ("id")! = null) {
response.setContentType ("Image/JPEG");
mencoba {
InputStream adalah = query_getphotoimageBlob (integer.parseint (request.getParameter ("id"))));
if (is! = null) {
IS = BufferedInputStream baru (IS);
BufferedImage Bi = ImageIo.Read (IS);
OutputStream os = response.getoutputStream ();
Jpegimageencoder encoder = jpegcodec.createJpegencoder (OS);
encoder.encode (BI);
os.close ();
is.close ();
}
} catch (ioException e) {
e.printstacktrace ();
} catch (NumberFormateException e) {
// TODO Blok tangkapan yang dihasilkan otomatis
e.printstacktrace ();
} catch (classnotfoundException e) {
// TODO Blok tangkapan yang dihasilkan otomatis
e.printstacktrace ();
} catch (sqlexception e) {
// TODO Blok tangkapan yang dihasilkan otomatis
e.printstacktrace ();
}
}
}
public static inputStream query_getphotoimageblob (int id) melempar ClassNotFoundException, SQLException {
String sql = "Pilih foto dari foto di mana id ="+id;
Koneksi con = null;
Pernyataan stmt = null;
Hasil rs = null;
Hasil InputStream = NULL;
mencoba {
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 ())
hasil = rs.getBlob ("foto"). getBinaryStream ();
} catch (sqlexception e) {
// todo: menangani pengecualian
System.err.println (e.getMessage ());
} Akhirnya{
rs.close ();
stmt.close ();
con.close ();
}
hasil pengembalian;
}
}
JSP Menampilkan kode kode salin sebagai berikut: <img src = "<%= Basepath%>/genimage? id = 3"/>
Kode salin dikonfigurasi dalam web.xml sebagai berikut: <servlet>
<servlet-name> genimage </servlet-name>
<servlet-class> readphoto </servlet-class>
</servlet>
<servlet-Mapping>
<servlet-name> genimage </servlet-name>
<rerl-pola>/Genimage </rerl-pola>
</servlet-Mapping>
Saya harap artikel ini akan membantu pemrograman Java semua orang.