`
lysongfei
  • 浏览: 59235 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JDBC操作BFILE字段

阅读更多

 

import java.io.*;
import java.sql.*;

import oracle.sql.*;
import oracle.jdbc.*;

public class JdbcBfile {
    public static void main(String[] args){
        Connection conn = null;
        Statement stmt = null;
        try{
            Class.forName("oracle.jdbc.driver.OracleDriver");
        }
        catch(ClassNotFoundException e){
            e.printStackTrace();
        }
        
        try{
            conn = DriverManager.getConnection("jdbc:oracle:thin:@db_server:1521:SID","username","password");
            stmt = conn.createStatement();
            conn.setAutoCommit(false);
            String dbDir = "LOB_DIR";
            String targetDir = "C:\\";
            String fileName = "a.zip";
            System.out.println("Adding BFILE to db...");
            addBfile(stmt,dbDir, fileName);
            System.out.println("Retrieving BFILE from db...");
            retrieveBfile(stmt,targetDir,fileName);
        }
        catch(SQLException e){
            e.printStackTrace();
        }
        finally{
            try{
                stmt.close();
                conn.close();
            }
            catch(SQLException e){
                e.printStackTrace();
            }
        }
    }
    
    private static void addBfile(
            Statement stmt, 
            String directory,
            String fileName){
        String sqlInsert = "INSERT INTO bfile_content VALUES('"+fileName+"', bfilename('"+directory+"','"+fileName+"'))";
        System.out.println(sqlInsert);
        
        try{
            stmt.executeUpdate(sqlInsert);
            stmt.execute("COMMIT");
            System.out.println("Added pointer to file"+ fileName+" to BFILE in DB Directory "+directory+"\n");
        }
        catch(SQLException e){
            System.out.println("Error Code: "+e.getErrorCode());
            System.out.println("Error Message: "+e.getMessage());
            e.printStackTrace();
        }
        
      }
    
    private static void retrieveBfile(
            Statement stmt,
            String targetDir,
            String fileName){
        String sqlSelect = "SELECT bfile_column FROM bfile_content WHERE file_name='"+fileName+"'";
        ResultSet bfileRS = null;
        try{
            //step1: retrieve the row containing BFILE locator
            bfileRS = stmt.executeQuery(sqlSelect);
            bfileRS.next();
            System.out.println(sqlSelect);
            
            //step2: create a BFILE obj and read the locator
            BFILE myBfile = ((OracleResultSet) bfileRS).getBFILE("bfile_column");
            
            //step3: get the file name from BFILE obj
            String bfileName = myBfile.getName();

            //step4: check the external file exists
            myBfile.fileExists();

            //step5: open the external file
            myBfile.openFile();

            //step6: create an input stream to read the external file
            InputStream in = myBfile.getBinaryStream();
            
            //step7: save the file contents to a new file
            String saveFileName = targetDir+"retrievedBFILE"+bfileName;
            saveFile(in, saveFileName);

            //step8: close the input stream
            in.close();
            myBfile.closeFile();
            
            System.out.println("Retrieved BFILE and saved to "+saveFileName);
        }
        catch(SQLException e){
            System.out.println("Error code = "+e.getErrorCode());
            System.out.println("Error message = "+e.getMessage());
            e.printStackTrace();
        }
        catch(IOException e){
            System.out.println("Error message = "+e.getMessage());
            e.printStackTrace();
        }
    }
    
    private static void saveFile(
            InputStream in, 
            String saveFileName){
        try{
            File file = new File(saveFileName);
            FileOutputStream out = new FileOutputStream(file);
            byte[] byteBuffer = new byte[8132];
            int bytesRead;            
            while((bytesRead = in.read(byteBuffer)) != -1){
                out.write(byteBuffer);
            }            
            out.close();
        }
        catch(IOException e){
            e.printStackTrace();
        }
    
    }
}
分享到:
评论

相关推荐

    java操作bfile

    本文详细介绍的oracle数据库如何存储bfile

    Bfile例子(找了很久才找到的)

    Bfile例子(找了很久才找到的),希望对不熟悉Bfile的朋友有所帮助。

    Oracle BLOB,BFILE大文件存储和FTP传输文件

    使用Oracle的大对象存储类型BLOB,BFILE存储和读取大文件,也包括使用FTP传输文件,如果使用FTP传输文件,需要在服务器端安装Serv-U软件。数据库为Oracle 10g,代码为Visual Studio 2008 VC++开发,软件中的代码有BLOB...

    Oracle jdbc for 11g 最新版 驱动 ojdbc6dms.jar

     包括ARRAY, BFILE, DATE, INTERVALDS, NUMBER, STRUCT, TIME,TIMESTAMP,TIMESTAMP等。  ojdbc5.jar: 适用于jdk5  ojdbc6.jar: 适用于jdk6  ***_g.jar 只是用javac -g编译,生成所有调试信息,其它全一样 ...

    oracle对大对象类型操作:blob,clob,nclob,bfile

    oracle对大对象类型操作:blob,clob,nclob,bfile

    Oracle jdbc for 11g 最新版 驱动 ojdbc6.jar

     包括ARRAY, BFILE, DATE, INTERVALDS, NUMBER, STRUCT, TIME,TIMESTAMP,TIMESTAMP等。  ojdbc5.jar: 适用于jdk5  ojdbc6.jar: 适用于jdk6  ***_g.jar 只是用javac -g编译,生成所有调试信息,其它全一样  ...

    前端开源库-bfile.zip

    前端开源库-bfile.zip

    前端开源库-bfile

    前端开源库-bfilebfile,node.js的文件系统包装器

    afile_to_bfile.rar_a to b

    c语言实现把a文件的内容读到b的文件中,很小,只是一个自己学习的一个小例子。

    Windows操作题及详解(12套).rar

    将当前文件夹下的B文件夹中的“BFILE.DOC”文件分别复制到当前文件夹和当前文件夹下的A文件夹中。 3.删除当前文件夹下的C文件夹;删除当前文件夹的A文件夹中的CCC文件夹。 4.将当前文件夹下的“OLE1.DOC”文件改名为...

    idCryptRust:命令行实用工具,用于加密解密DOOM的.bfile和.blang文件

    命令行实用程序,用于加密/解密DOOM的.bfile和.blang文件。 用法 idCrypt <file> 该工具将尝试解密文件是否以.blang或.bfile结尾,否则进行加密。 编译中 Linux / macOS 要进行编译,您需要使用rustup设置一个...

    数据库基础

    §6.3.1 用delete删除全部记录的操作 174 §6.3.2 用delete有条件删除部分记录 175 §6.3.3 用delete分段删除大量记录 175 §6.4 insert、delete及update 的提交和撤消 176 §6.4.1 自动提交的设置 176 §6.4.2 保留...

    LOB2Table:将 Oracle CLOB、BLOB、BFILE 或 VARCHAR2 中的 CSV 数据作为表进行查询-开源

    LOB2Table 是一组 Oracle PL/SQL 流水线函数,允许您像普通表一样查询 CLOB、BLOB、BFILE 或 VARCHAR2 中的 CSV 或固定列数据存储。 有关详细说明,请参阅 Wiki。

    Oracle8i_9i数据库基础

    §6.3.1 用delete删除全部记录的操作 174 §6.3.2 用delete有条件删除部分记录 175 §6.3.3 用delete分段删除大量记录 175 §6.4 insert、delete及update 的提交和撤消 176 §6.4.1 自动提交的设置 176 §6.4.2 保留...

    oracle支持的数据类型

    BFILE 存放在数据库外的二进制数据 最大长度4G ROWID 数据表中记录的唯一行号 10 bytes ********.****.****格式,*为0或1 NROWID 二进制数据表中记录的唯一行号 最大长度4000 bytes NUMBER(P,S) 数字类型 P为整数位...

    oracle .

    表及索引的定义操作 视图、同义词和序列 簇与分区 复杂查询语句的使用 一些高级的用法 安全管理 其它一些常见问题及技巧 常用技巧 Oracle PL/SQL基础 PL/SQL 块结构和组成元素 PL/SQL 处理流程 光标的使用 错误处理 ...

    金蝶K3新建账套各类报错的解决方案

    新建账套时提示“无法创建数据库!请检查目录…是否存在,以及系统空间是否充 ...Server\MSSQL\<TARGETDIR>\BFILE\SCM.bak’ 。设备出现错误或设备脱机。详细信息 请参阅 SQL Server 错误日志。 ”发生的原因

    北大青鸟Oracle教程集1

    4-4 Raw 和 Long Raw 数据类型 ―用于存储二进制数据 用于存储二进制数据 LOB 数据类型 ―CLOB ―BLOB ―BFILE 数据定义语言 数据定义命令 ―CREATE 命令 ―ALTER 命令 ―DROP 命令 ―TRUNCATE 命令 数据操纵语言 ...

    北大青鸟Oracle教程集2

    4-4 Raw 和 Long Raw 数据类型 ―用于存储二进制数据 用于存储二进制数据 LOB 数据类型 ―CLOB ―BLOB ―BFILE 数据定义语言 数据定义命令 ―CREATE 命令 ―ALTER 命令 ―DROP 命令 ―TRUNCATE 命令 数据操纵语言 ...

    Oracle9i的init.ora参数中文说明

    说明: 指定一对值 (UTC,TZD), 设置 TIME WITH TIME ZONE 数据类型的默认值, 该数据类型包含 HOUR, MINUTE, SECOND, TIMEZONE_HOUR 和 TIMEZONE_MINUTE 这几个日期时间字段。UTC 是世界时而 TZD 是当地时区。 语法: ...

Global site tag (gtag.js) - Google Analytics