标签:style blog http color os java 使用 io strong
述】 
    Oracle的Blob字段比较特殊,他比long字段的性能要好很多,可以用来保存例如图片之类的二进制数据。 
写入Blob字段和写入其它类型字段的方式非常不同,因为Blob自身有一个cursor,你必须使用cursor对 
blob进行操作,因而你在写入Blob之前,必须获得cursor才能进行写入,那么如何获得Blob的cursor呢? 
这需要你先插入一个empty的blob,这将创建一个blob的cursor,然后你再把这个empty的blob的cursor 
用select查询出来,这样通过两步操作,你就获得了blob的cursor,可以真正地写入blob数据了。 
【处理流程】
//读取Blob数据
package demo;
import java.sql.*;
import java.io.*;
public class ReadBlob
{
	//加载驱动程序
	static 
	{
		
		try
		{
			Class.forName("oracle.jdbc.driver.OracleDriver");
		} catch (ClassNotFoundException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args)
	{
		try
		{
			//1. 建立连接
			String url = "jdbc:oracle:thin:@localhost:1521:OracleDB";
			Connection conn = DriverManager.getConnection(url,"scott","tiger");
			conn.setAutoCommit(false);
			
			//2. 查询数据
			String sql = "select image from user_info where user_id = 1";
			Statement stmt = conn.createStatement();
			ResultSet rs = stmt.executeQuery(sql);
			
			//3. 读取Blob类型数据
			Blob blob = null;
			if(rs.next())
			{
				blob = rs.getBlob(1);
			}
			byte[] temp = new byte[(int)blob.length()];
			InputStream in = blob.getBinaryStream();
			in.read(temp)s
			//保证文件名唯一,你可以用主键+时间啊等等方法				
			File file = new File("D://img.bmp");
			FileOutputStream fout = new FileOutputStream(file);
			fout.write(temp);
			in.close();
			fout.close();
		} catch (Exception e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
标签:style blog http color os java 使用 io strong
原文地址:http://www.cnblogs.com/wzh123/p/3936866.html