原理:
从数据库中读取blob到blob对象. blob blob = rs.getblob(2);
把blob传给stream.
用stream参数创建image对象
显示image对象.
说明: 这只是例子, 没有考虑其他方面. 希望大家能对java连接数据库,和取对象有个具体的了解.
关于数据库的sql
create table photo (
photo_no int(6) unsigned not null auto_increment,
image blob,
primary key (`photo_no`)
)
本例子用到两个文件:
drawpanel.java如下
import java.awt.*;
import java.sql.*;
import java.awt.image.*;
import java.io.*;
import javax.swing.*;
/**
*
title:
*
*
description:vincentlaw@163.com
*
*
copyright: copyright (c) 2005
*
*
vincent
*
* @author vincent
* @version 1.0
*/
public class drawpanel extends panel {
image im;
insets insets;
public drawpanel() {
im=toolkit.getdefaulttoolkit().getimage("c:1.jpg"); //默认的文件
try {
jbinit();
} catch (exception ex) {
ex.printstacktrace();
}
}
public void addnotify() {
super.addnotify();
insets = getinsets();
setbounds(100, 100, 217 + insets.left, 321 + insets.top);
}
public void paint(graphics g) {
g.drawimage(im, insets.left, insets.top, this);
}
private void jbinit() throws exception {
}
public void changeimage(string filename)
{
try {
//class.forname("oracle.jdbc.driver.oracledriver");
//connection conn = drivermanager.getconnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl2", "user","password");
class.forname("com.mysql.jdbc.driver");
connection conn = drivermanager.getconnection("jdbc:mysql://localhost:3306/job?user=root
statement stmt = conn.createstatement();
resultset rs = stmt.executequery("select photo_no,photo_image from photo");
rs.next();
blob blob = rs.getblob(2);
// 数据库连接
inputstream fin = blob.getbinarystream();
im = javax.imageio.imageio.read(fin);
rs.close();
stmt.close();
conn.close();
}
catch(exception e)
{
e.printstacktrace();
joptionpane.showmessagedialog(null,"错误,装载本地文件");
im=toolkit.getdefaulttoolkit().getimage(filename);
}
this.repaint();
}
}
showimage.java如下:
import java.awt.borderlayout;
import java.awt.*;
import javax.swing.*;
import javax.swing.jtogglebutton;
import java.awt.event.actionevent;
import java.awt.event.actionlistener;
/**
*
title:
*
*
description:vincentlaw@163.com
*
*
copyright: copyright (c) 2005
*
*
vincent
*
* @author vincent
* @version 1.0
*/
public class showimage extends jframe {
borderlayout borderlayout1 = new borderlayout();
jtogglebutton jtogglebutton1 = new jtogglebutton();
drawpanel panel=new drawpanel();
public showimage() {
try {
jbinit();
} catch (exception exception) {
exception.printstacktrace();
}
}
private void jbinit() throws exception {
getcontentpane().setlayout(borderlayout1);
jtogglebutton1.settext("jtogglebutton1");
jtogglebutton1.addactionlistener(new
showimage_jtogglebutton1_actionadapter(this));
this.getcontentpane().add(jtogglebutton1, java.awt.borderlayout.north);
this.getcontentpane().add(panel,java.awt.borderlayout.center);
}
public void jtogglebutton1_actionperformed(actionevent e) {
panel.changeimage("e:photohoto1281.jpg"); //备用图像文件
}
public final static void main(string[] args){
jframe frame=new showimage();
frame.setsize(800,600);
frame.setdefaultcloseoperation(jframe.exit_on_close);
frame.setvisible(true);
}
}
class showimage_jtogglebutton1_actionadapter implements actionlistener {
private showimage adaptee;
showimage_jtogglebutton1_actionadapter(showimage adaptee) {
this.adaptee = adaptee;
}
public void actionperformed(actionevent e) {
adaptee.jtogglebutton1_actionperformed(e);
}
}
闽公网安备 35060202000074号