标签: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