日期:2014-05-16  浏览次数:20483 次

mysql数据库如何储取文件

?

注:

转载注明原文地址:?http://thetopofqingshan.iteye.com/blog/1566499

DatabasesConnect 类:http://thetopofqingshan.iteye.com/blog/1504004

建议:使用在数据库中储存文件路径与文件名

?

建表sql:

?

CREATE TABLE `file` (
	`id` INT(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id标识',
	`image` LONGBLOB NULL COMMENT '图片',
	`name` VARCHAR(50) NULL DEFAULT NULL COMMENT '图片名称',
	`createTime` DATETIME NULL DEFAULT NULL COMMENT '创建时间',
	`updateTime` DATETIME NULL DEFAULT NULL COMMENT '更新时间',
	PRIMARY KEY (`id`)
)
COMMENT='储存文件'
COLLATE='utf8_general_ci'
ENGINE=InnoDB;
?

用于mysql数据库中存取文件:

package com.qingshan.jdbc;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * <pre>
 * 用于mysql数据库中存取文件
 * </pre>
 * <hr Color="green" ></hr> 
 * 2012 admin Group 版权所有
 * <hr Color="green" ></hr> 
 * @author  thetopofadmin
 * @version 1.0.0
 * @since   JDK 1.5
 * @date    2012-6-23
 */
public class FileFecthDB {
	private static Connection c  = null;
	static{
		DatabasesConnect.name="root";
		DatabasesConnect.password="admin";
		DatabasesConnect.databaseName="admin";
		try {
			c  = DatabasesConnect.getConnection(DatabasesConnect.MYSQL);//得到数据连接
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	/**
	 * <pre>
	 * 用于插入文件
	 * </pre>
	 * @throws ClassNotFoundException
	 * @throws SQLException
	 * @throws IOException
	 *
	 */
	public static void insert() throws ClassNotFoundException, SQLException, IOException{
		PreparedStatement ps =  c.prepareStatement("insert into file(image,name, createTime, updateTime) values(?,?,now(),now())");
		File file = new File("C:/Users/Administrator/Pictures/【IThome.com】【桌面壁纸】这天空,我想飞/0.jpg");
		if(!file.exists()){
			throw new FileNotFoundException(file.getName().toString());
		}
		InputStream is =  new FileInputStream(file);
		ps.setBinaryStream(1, is);
		ps.setString(2,  file.getName().toString());
		ps.execute();
		is.close();
		ps.close();  
        c.close(); 
	}
	
	/**
	 * <pre>
	 * 用于取出文件
	 * </pre>
	 * @throws ClassNotFoundException
	 * @throws SQLException
	 * @throws IOException
	 *
	 */
	public static void select() throws ClassNotFoundException, SQLException, IOException{
		Statement s = c.createStatement();
		ResultSet rs =  s.executeQuery("select *from file");
		while(rs.next()){
			InputStream is  = rs.getBinaryStream("image");//取出文件后
			File file = new File("A:/"+rs.getString("name"));//储存文件的路径
			OutputStream os =  new FileOutputStream(file);
			byte b[] = new byte[1024*20];
			while(is.read(b) != -1){
				os.write(b);
			}
			is.close();
			os.close();
		}
        rs.close();
        s.close();
        c.close(); 
	}
	
	public static void main(String[] args) throws ClassNotFoundException, SQLException, IOException {
		insert();
//		select();
	}
}
?