数据库中的BLOB

public class TestBLOB {
    static String url = "jdbc:oracle:thin:@localhost:1521:orcl";
    static String driver = "oracle.jdbc.driver.OracleDriver";
    static String userName = "scott";
    static String pwd = "tiger";
    
    public static void main(String[] args) {
        try {
//            addBLOB();
            readBLOB();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
//    public static void addBLOB() throws ClassNotFoundException, SQLException, IOException{
//        Class.forName(driver);  //加载数据库驱动
//        Connection con = DriverManager.getConnection(url, userName, pwd);
//        con.setAutoCommit(false);  //关闭自动提交
//        Statement stmt = con.createStatement();
//        stmt.executeUpdate("UPDATE ATTACHMENT SET MYBLOB = EMPTY_BLOB() WHERE ID=1");
//        String strSQL = "SELECT MYBLOB FROM ATTACHMENT WHERE id = 1 ";
//        ResultSet rs = stmt.executeQuery(strSQL);
//        BLOB blob = null;
//        if(rs.next()){
//            blob = (BLOB) rs.getBlob(1);
//        }
//        OutputStream os = blob.setBinaryStream(1);
//        File file = new File("F:\\aaa.pdf");
//        InputStream is = new FileInputStream(file);
//        byte [] b = new byte[1024];
//        int len = 0;
//        while((len = is.read(b)) != -1){
//            os.write(b,0,len);
//        }
//        os.close();
//        is.close();
//        con.commit();
//        con.close();
//    }
    
    public static void readBLOB() throws ClassNotFoundException, SQLException, IOException{
        Class.forName(driver);  //加载数据库驱动
        Connection con = DriverManager.getConnection(url,userName,pwd);
        con.setAutoCommit(false);  //关闭自动提交
        PreparedStatement pstm = con.prepareCall("select myblob from attachment where id=1");
        ResultSet rs = pstm.executeQuery();
        BLOB blob = null;
        if(rs.next()){
            blob = (BLOB) rs.getBlob(1);
        }
        InputStream is = blob.getBinaryStream();
        byte [] b = new byte[1024];
        int len = 0;
        File file = new File("D:\\bbb.pdf");
        OutputStream os = new FileOutputStream(file);
        while((len = is.read(b))!= -1){
            os.write(b,0,len);  //0表示起始位置,len表示长度
        }
        is.close();
        os.close();
        con.commit();
        con.close();
    }
}

时间: 2024-10-17 12:34:40

数据库中的BLOB的相关文章

Oracle数据库中的blob类型解析

Oracle的Blob字段比较特殊,他比long字段的性能要好很多,可以用来保存例如图片之类的二进制数据. 写入Blob字段和写入其它类型字段的方式非常不同,因为Blob自身有一个cursor,你必须使用cursor对blob进行操作,因而你在写入Blob之前,必须获得cursor才能进行写入,那么如何获得Blob的cursor呢? 这需要你先插入一个empty的blob,这将创建一个blob的cursor,然后你再把这个empty的blob的cursor用select查询出来,这样通过两步操作

采用struts2+hibernate实现保存文件到Oracle数据库&&并附下载代码【导入即可用】;数据库中保存blob类型的二进制文件

原文:采用struts2+hibernate实现保存文件到Oracle数据库&&并附下载代码[导入即可用]:数据库中保存blob类型的二进制文件 源代码下载地址:http://www.zuidaima.com/share/1550463402478592.htm

使用DBLink方式同步远程数据库中含Blob、Clob字段表的问题解决

在数据库同步中我们经常会用到DBLink方式.DBLink可以将物理上存放于网络的多个数据库在逻辑上当成一个单一的大数据库.开发人员无需关心数据库的网络分布,就能很方便的实现从不同数据库之间读取数据.如何在Oracle数据库间建立DBLink我在之前的文章已有涉及,这里就不花篇幅讲解了.具体请查看Oracle建立DBLink. 本篇文章主要阐述如何解决DBLink方式无法实现Blob.Clob字段数据同步的问题.在网上已经有很多牛人给出了解决方案,在参照他们的方案解决问题的过程中,发现有些小问题

图片以BLOB存储在后台数据库中,Android客户端要进行读取显示

解决方法: 1:在后台以InputStream的方式将图片从数据库中读出: public static InputStream getPicInputStream(){ String id = "f304733361e243779b2340afe20e62bf"; Connection conn = JdbcUtil.getConnection(); PreparedStatement ps = null; ResultSet rs = null; InputStream is = n

DB2数据库中DB2字符串类型

DB2字符串是DB2数据库中的基础知识,下面就为您分类介绍DB2字符串,供您参考,如果您对DB2字符串方面刚兴趣的话,不妨一看. DB2字符串是字节序列.DB2字符串包括 CHAR(n) 类型的定长字符串和 VARCHAR(n).LONG VARCHAR 或 CLOB(n) 类型的变长字符串.字符串的长度就是序列中的字节数. *定长字符串,CHARACTER(n) 或 CHAR(n):定长字符串的长度介于 1 到 254 字节之间.如果没有指定长度,那么就认为是 1 个字节. *变长字符串,VA

Quartz将Job保存在数据库中所需表的说明

http://blog.iqbon.com/doc/364.html   (将Quartz持久化到数据库的做法) QRTZ_CALENDARS 以 Blob 类型存储 Quartz 的 Calendar 信息 QRTZ_CRON_TRIGGERS 存储 Cron Trigger,包括 Cron表达式和时区信息 QRTZ_FIRED_TRIGGERS 存储与已触发的 Trigger 相关的状态信息,以及相联 Job的执行信息 QRTZ_PAUSED_TRIGGER_GRPS 存储已暂停的 Trig

FMDB使用的一点心得:数据库创建、制表、查询等以及image转换成二进制nsdata保存到数据库中

<span style="font-size:18px;">//首先,获取数据库的路径,(如果不存在,就是我们想要存储的路径),不用担心每次都创建数据库会重复,不会的,如果没有则创建,有了就不会再重复创建: //接下来,我们要制表,首先我们先查看我们的表是否已经存在,方法在下面代码中:如果存在则跳过,不存在则创建</span> -(void)DataBaseInit { //获取Document文件夹下的数据库文件,没有则创建 NSString *dbPath

JDBC:数据库操作:BLOB数据处理

CLOB主要保存海量文字,而BLOB是专门保存二进制数据:包括,图片,音乐,影片.等. 在MYSQL中,BLOB类型使用LONGBLOB声明,最高可存储4G内容. 创建一个表: create table userblob ( id int(4) primary key not null auto_increment, name varchar(30), photo longblob ); 代码: package 类集; import java.sql.Connection ; import ja

数据库中数据DELETE了怎样恢复

USE [BBDAS_FP_DATA] GO /****** Object: StoredProcedure [dbo].[Recover_Deleted_Data_Proc] Script Date: 07/12/2014 15:09:44 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[Recover_Deleted_Data_Proc] @Database_Name NVARCH