`
Luob.
  • 浏览: 1589979 次
  • 来自: 上海
社区版块
存档分类
最新评论

使用 Blob 存储 和读取 图片

    博客分类:
  • JDBC
阅读更多
做个简单 图片上传和浏览的工具


package com.enhance.jdbc.blob;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

import javax.swing.DefaultListModel;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;


/*  创建 blob 字段的 表
create table img_table
	(img_id int auto_increment primary key,
	img_name varchar(255),
	img_data mediumblob);
 */
public class BlobTest {
	JFrame jf=new JFrame("图片管理程序");
	private static Connection conn;
	private static PreparedStatement insert;
	private static PreparedStatement query;
	private static PreparedStatement queryAll;
	
	private DefaultListModel imageModel=new DefaultListModel();
	private JList imageList=new JList(imageModel);
	private JTextField filePath=new JTextField(26);
	private JButton browserBn=new JButton("...");
	private JButton uploadBn=new JButton("上传");
	private JLabel imageLabel=new JLabel();
	
	JFileChooser chooser=new JFileChooser(".");
	ExtensionFileFilter filter=new ExtensionFileFilter();
	
	static{
		try {
			Properties prop=new Properties();
			prop.load(new FileInputStream("src/mysql.ini"));
			String driver=prop.getProperty("driver");
			String url=prop.getProperty("url");
			String user=prop.getProperty("user");
			String pass=prop.getProperty("pass");
			
			Class.forName(driver);
			conn=DriverManager.getConnection(url,user,pass);
			
			insert=conn.prepareStatement("insert into img_table(img_name,img_data) values (?,?)",Statement.RETURN_GENERATED_KEYS);
			query=conn.prepareStatement("select img_data from img_table where img_id=?");
			queryAll=conn.prepareStatement("select img_id,img_name from img_table");
			
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public void init() throws SQLException{
		filter.addExtension("jpg");
		filter.addExtension("jpeg");
		filter.addExtension("gif");
		filter.addExtension("png");
		filter.setDescription("图片文件(*.jpg,*.jpeg,*.gif,*.png)");
		chooser.addChoosableFileFilter(filter);
		chooser.setAcceptAllFileFilterUsed(false);
		fillListModel();
		
		filePath.setEditable(false);
		//只能单选
		imageList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		JPanel jp=new JPanel();
		jp.add(filePath);
		jp.add(browserBn);
		browserBn.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				int result=chooser.showDialog(jf, "浏览图片文件上传");
				if(result==JFileChooser.APPROVE_OPTION){
					filePath.setText(chooser.getSelectedFile().getPath());
				}
			}
		});
		jp.add(uploadBn);
		uploadBn.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				if(filePath.getText().trim().length()>0){
					upload(filePath.getText());
					//请客文本框内容
					filePath.setText("");
				}
			}
		});
		
		JPanel left=new JPanel();
		left.setLayout(new BorderLayout());
		left.add(new JScrollPane(imageLabel),BorderLayout.CENTER);
		left.add(jp,BorderLayout.SOUTH);
		jf.add(left);
		imageList.setFixedCellWidth(160);
		jf.add(new JScrollPane(imageList),BorderLayout.EAST);
		imageList.addMouseListener(new MouseAdapter(){

			@Override
			public void mouseClicked(MouseEvent e) {
				// TODO Auto-generated method stub
				if(e.getClickCount()>=2){
					//取出选择的List
					ImageHolder cur=(ImageHolder)imageList.getSelectedValue();
					try {
						showImage(cur.getId());
					} catch (SQLException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
				}
			}
			
		});
		jf.setSize(620,400);
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		jf.setVisible(true);
		
	}
	
	public void fillListModel() throws SQLException{
		ResultSet rs=null;
		try {
			imageModel.clear();
			rs=queryAll.executeQuery();
			while(rs.next()){
				imageModel.addElement(new ImageHolder(rs.getInt(1),rs.getString(2)));
			}
		}finally{
			if(rs!=null)
				rs.close();
		}
		
	}
	public void upload(String fileName){
		InputStream is=null;
		try {
			String imageName=fileName.substring(fileName.lastIndexOf("\\")+1,fileName.lastIndexOf("."));
			insert.setString(1, imageName);
			File f=new File(fileName);
			is=new FileInputStream(f);
			insert.setBinaryStream(2, is,(int)f.length());
			int affect=insert.executeUpdate();
			System.out.println(affect);
			if(affect==1)
				fillListModel();
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			try {
				if(is!=null)
					is.close();
				
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
		
	}
	
	public void showImage(int id) throws SQLException{
		ResultSet rs=null;
		try {
			query.setInt(1, id);
			rs=query.executeQuery();
			if(rs.next()){
				Blob imageBlob=rs.getBlob(1);
				imageBlob.getBinaryStream();
				ImageIcon icon=new ImageIcon(imageBlob.getBytes(1l, (int)imageBlob.length()));
				imageLabel.setIcon(icon);
			}
			
		}finally{
			if(rs!=null)
				rs.close();
		}
		
	}
	
	public static void main(String[] args) throws SQLException {
		new BlobTest().init();
	}

}

//-----------------------------
package com.enhance.jdbc.blob;

import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;

import javax.swing.filechooser.FileFilter;

public class ExtensionFileFilter extends FileFilter {

	private String description="";
	private ArrayList<String> extensions=new ArrayList<String>();
	public  void addExtension(String extension){
		if(!extension.startsWith(".")){
			extension="."+extension;
			extensions.add(extension.toLowerCase());
		}
	}
	
	
	@Override
	public boolean accept(File f) {
		// TODO Auto-generated method stub
		if(f.isDirectory())
			return true;
		String name=f.getName().toLowerCase();
		for (String extension :extensions){
			if(name.endsWith(extension))
				return true;
		}
		return false;
	}

	public void setDescription(String aDescription){
		description=aDescription;
	}
	
	@Override
	public String getDescription() {
		// TODO Auto-generated method stub
		return description;
	}

}
//----------------------------------
package com.enhance.jdbc.blob;

public class ImageHolder {

	private int id;
	private String name;
	public ImageHolder() {
		super();
		// TODO Auto-generated constructor stub
	}
	public ImageHolder(int id, String name) {
		super();
		this.id = id;
		this.name = name;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return name;
	}
	
}


  • 大小: 97.2 KB
分享到:
评论

相关推荐

    C#,BLOB读取操作

    C# 中的 BLOB 读取操作 C# 中的 BLOB(Binary Large OBject)读取操作是指从数据库中读取二进制数据的过程。BLOB 是一种二进制数据...通过使用 FileStream 对象和相关的方法,我们可以轻松地读取和写入 BLOB 数据。

    oracle blob转文件读取

    ### Oracle Blob类型转换为文件读取的相关知识点 ...通过以上内容,我们可以了解到如何在C#中实现Oracle数据库中Blob类型的读取和保存操作。这对于处理数据库中的多媒体文件等二进制数据非常有用。

    java中读取ORACLE中BLOB字段存储的图片

    ### Java中读取Oracle数据库BLOB字段存储的图片方法详解 #### 一、背景与目的 在实际的应用开发过程中,经常会有将图片等二进制数据存入数据库的需求。Oracle数据库支持通过BLOB(Binary Large Object)类型来存储...

    java,Blob字段操作,将图片或者文件保存到数据库中.zip

    以上就是Java中Blob字段操作的基本流程,通过这些步骤,你可以成功地将图片或文件保存到数据库中,并能从数据库中读取和恢复这些数据。在实际开发中,根据具体需求,可能还需要处理异常、事务管理和资源关闭等问题,...

    c#Blob图片在oracle上读取、保存、上传

    c#-操作数据库oracle的小代码,提供用于学习。代码主要实现从oracle读取、保存、上传图片等功能,使用了Oracle.DataAccess.dll,想了解相关知识的欢迎下载,有问题的请给我留言,谢谢。

    mysql,blob格式存储图片事例,商品展示页面

    在这个事例中,我们将深入探讨如何使用BLOB(Binary Large Object)数据类型来存储非结构化的数据,如图片。 BLOB是MySQL中用于存储二进制大对象的数据类型,它可以容纳图像、音频文件、视频剪辑等大量数据。在商品...

    图片存入Oracle中,用clob和blob两种方式

    在数据库管理中,存储非结构化数据如图片、音频或视频文件时,通常会使用`CLOB`(Character Large Object)和`BLOB`(Binary Large Object)这两种数据类型。Oracle数据库系统支持这两种数据类型,用于存储大量文本...

    java读取大字段blob类型

    - **性能优化**:考虑到性能因素,在读取`BLOB`数据时可以适当调整缓冲区大小以平衡读取速度和内存占用。 - **安全性**:使用`PreparedStatement`可以有效防止SQL注入攻击,提高系统的安全性。 - **异常处理**:对于...

    Access数据库图片存储与读取

    Access数据库,作为Microsoft Office套件的一部分,是一个功能强大的关系型数据库管理系统(RDBMS),它支持多种数据类型,包括OLE对象,这使得存储图片和其他二进制大对象(BLOB)成为可能。以下是一些关键知识点:...

    Struts用JDBC的Blob字段保存和读取Oracle数据库

    ### Struts 使用 JDBC 的 Blob 字段保存和读取 Oracle 数据库 #### 背景介绍 在企业级应用开发中,经常会遇到需要处理文件上传下载的情况。这些文件可能包括图片、文档等各种类型的数据。传统的做法是将文件保存到...

    Java-图片BLOB的存取DEMO

    2、com.ub:实现简单的插入及读取操作,读取后的BLOB可以生成新图片,并使用JFrame方式展现。 3、com.cc: 由于需要将两个不同库(测试代码是同一个库的两个表 IMAGETAB和 IMAGETAB3)的的照片进行更新,表里面存...

    图片BASE64加密保存到数据库Blob类型中(放入数据库,并取出生成图片)

    总的来说,这个示例提供了一种有效的方法来处理数据库中的图片存储,通过BASE64编码简化了数据的传输和存储,同时在数据库层面利用Blob类型保持了图片数据的完整性。不过,对于大量图片或需要安全保护的图片,更推荐...

    Delphi 如何将二维数组数据 以Blob 存入数据库中 并读取 工程

    通过以上步骤,你可以成功地在 Delphi 中实现二维数组数据的 Blob 存储和读取。实际操作时,可能还需要考虑性能优化,比如批量处理和缓存策略。对于大型数据集,可以考虑使用分块读写以减少内存占用。在实践中,可以...

    从mysql数据库中批量下载Blob图片到本地

    本教程将深入探讨如何在Java环境下,批量地从MySQL数据库中下载存储在Blob字段中的图片,并将其保存到本地文件系统。 首先,我们需要理解Blob类型。Blob是MySQL中的一个数据类型,用于存储大量二进制数据。它分为四...

    使用hibernate对oracle读取blob

    本文将详细介绍如何使用Hibernate和JDBC读取和存储Oracle数据库中的Blob对象。 ### 1. Hibernate Blob操作 在Hibernate中,Blob对象通常与Java的`java.sql.Blob`接口相对应。在实体类中,你可以定义一个Blob类型的...

    VS、VC++实现对象序列化保存到sqlite表blob类型字段中,包含blob字段的读取和保存,

    本文将详细讲解如何在VS(Visual Studio)和VC++环境中实现对象序列化,并将其保存到SQLite数据库的blob(Binary Large Object)类型字段中。同时,我们也会探讨如何从blob字段中读取并恢复这些对象。 首先,对象...

    Oralce 保存与读取Blob类型文件

    本文将深入探讨如何在Oracle中保存与读取Blob类型的文件,这一过程涉及到数据库操作、流处理以及异常管理,是IT行业中数据库应用的重要组成部分。 ### 一、保存Blob类型文件到Oracle数据库 #### 代码解析: 1. **...

    Java读取数据库中blob字段并插入到另一个表中

    可以从数据库中读取blob字段并插入到另一个表中,已经测试通过

Global site tag (gtag.js) - Google Analytics