GetTable .java如下.
import java.sql.*;
import java.io.*;
public class GetTable {
public static void main(String[] args) {
ReadDb4 rd = new ReadDb4();
}
}
class ReadDb4 { //读取数据写XML文件
public ReadDb4() {
try {
//加载SQL驱动
// Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
// String sqlstr="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs";
//String user="sa";
//String pass="";
//加载oracle驱动,
Class.forName("oracle.jdbc.driver.OracleDriver");
String sqlstr = "jdbc:oracle:thin:@localhost:1521:jay";
String user = "system";
String pass = "manager";
//建立连接
Connection conn = DriverManager.getConnection(sqlstr, user, pass);
//得到执行语句
Statement stmt = conn.createStatement();
//得到查询的结果 自己更改查询语句
ResultSet rs = stmt.executeQuery("select * from emp");
// 设置表格的名字
String tempTableName = "emp";
String tableName = tempTableName.toUpperCase();
//得到列的名字
ResultSetMetaData rsmd = rs.getMetaData();
int numColumns = rsmd.getColumnCount();
String[] columnNames = new String[numColumns];
for (int i = 0; i < numColumns; i++) {
columnNames[i] = rsmd.getColumnName(i + 1);
}
//建立一个文件
File ff = new File("f:"+tableName+".xml");
ff.createNewFile();
//写入内容
FileWriter fw = new FileWriter(ff);
fw.write("<?xml version="1.0" encoding="UTF-8"?>n");
fw.write("<" + tableName + "s>");
//循环写入数据
while (rs.next()) {
fw.write("<" + tableName + ">");
//每一行
for (int i = 0; i < numColumns; i++) {
fw.write("<" + columnNames[i] + ">");
fw.write(String.valueOf(rs.getObject(i + 1)));
fw.write("</" + columnNames[i] + ">n");
}
fw.write("</" + tableName + ">");
}
fw.write("</" + tableName + "s>");
//释放资源
//关闭文件操作
fw.close();
//释放数据库连接
conn.close();
//提示
System.out.println("文件写入成功!!!!!!");
} catch (Exception ee) {
ee.printStackTrace();
}
}
}
原理:
<1> 从数据库中读取blob到Blob对象. Blob blob = rs.getBlob(2);
<2>把blob传给Stream.
<3>用Stream参数创建Image对象
<4>显示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.*;
/**
* <p>Title: </p>
*
* <p>Description:vincentlaw@163.com </p>
*
* <p>Copyright: Copyright (c) 2005</p>
*
* <p>Vincent</p>
*
* @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&password=5672831");
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;
/**
* <p>Title: </p>
*
* <p>Description:vincentlaw@163.com </p>
*
* <p>Copyright: Copyright (c) 2005</p>
*
* <p>Vincent</p>
*
* @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);
}
}
2005-7-19----2005-7-24开始云南之旅.



环境mysql+tomcat:
<1>先在mysql下建立如下的table. 并insert图像.
mysql.sql文件如下:
CREATE TABLE photo (
photo_no int(6) unsigned NOT NULL auto_increment,
image blob,
PRIMARY KEY (`photo_no`)
)
<2>把show.jsp放在tomcat的任意目录下. show.jsp作用:从数据库中读出blob,并产生image/jpg.
show.jsp文件如下:
<%@ page contentType="text/html; charset=gbk" %>
<%@ page import="java.io.*"%>
<%@ page import="java.sql.*, javax.sql.*" %>
<%@ page import="java.util.*"%>
<%@ page import="java.math.*"%>
<%
String photo_no = request.getParameter("photo_no");
//mysql连接
Class.forName("com.mysql.jdbc.Driver").newInstance();
String URL="jdbc:mysql://localhost:3306/job?user=root&password=111111";
Connection con = DriverManager.getConnection(URL);
//oracle连接
//String URL="jdbc:oracle:thin@localhost:1521:orcl2";
//user="system";
//password="manager";
//Connection con = DriverManager.getConnection(URL,user,password);
try{
// 准备语句执行对象
Statement stmt = con.createStatement();
String sql = " SELECT * FROM PHOTO WHERE photo_no = "+ photo_no;
ResultSet rs = stmt.executeQuery(sql);
if (rs.next()) {
Blob b = rs.getBlob("photo_image");
long size = b.length();
//out.print(size);
byte[] bs = b.getBytes(1, (int)size);
response.setContentType("image/jpeg");
OutputStream outs = response.getOutputStream();
outs.write(bs);
outs.flush();
rs.close();
}
else {
rs.close();
response.sendRedirect("./images/error.gif");
}
}
finally{
con.close();
}
%>
<3>把如下文件放在show.jsp的同一目录下.
index.html文件如下:
<HTML>
<HEAD>
<TITLE> 图像测试 </TITLE>
</HEAD>
<BODY>
<TABLE>
<TR>
<TD>图像测试</TD>
</TR>
<TR>
<TD><img src="show.jsp?photo_no=2"></TD>
</TR>
</TABLE>
</BODY>
</HTML>






