甘先生Blog
自我介绍
切换风格
订阅我的Blog
博客日历
文章归档...
最新发表...
博客统计...
网站链接...
资源
===========================================================
【Mac OS X for x86:苹果砸到微软头上】 
===========================================================
一个朋友跟人在太平洋电脑城上的一留言版火拼,讨论Windows及MacOSX的优劣。
http://cmt.pconline.com.cn/topic.jsp?id=1116257
vincentlaw 发表于:2005.08.19 18:10 ::分类: ( 初始分类 ) ::阅读:(132522次) :: 评论 (6) :: 引用 (0)
===========================================================
把数据库的表格导入到xml中(java)
===========================================================

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();
}
}
}


vincentlaw 发表于:2005.08.19 18:07 ::分类: ( java ) ::阅读:(63855次) :: 评论 (3) :: 引用 (0)
===========================================================
在java应用程序中显示数据库的blob图像
===========================================================

原理:

<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);
}

}


vincentlaw 发表于:2005.08.16 16:52 ::分类: ( java , oracle ) ::阅读:(181956次) :: 评论 (930) :: 引用 (0)
===========================================================
远行于云南
===========================================================

2005-7-19----2005-7-24开始云南之旅.


vincentlaw 发表于:2005.08.15 17:40 ::分类: ( 个人日志 ) ::阅读:(184851次) :: 评论 (4) :: 引用 (0)
===========================================================
用JSP从数据库中读取图片并显示在网页上
===========================================================

环境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>


vincentlaw 发表于:2005.08.15 16:59 ::分类: ( J2EE ) ::阅读:(92578次) :: 评论 (59) :: 引用 (0)