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();
}
}
}
分享到:
相关推荐
本文详细介绍的oracle数据库如何存储bfile
Bfile例子(找了很久才找到的),希望对不熟悉Bfile的朋友有所帮助。
使用Oracle的大对象存储类型BLOB,BFILE存储和读取大文件,也包括使用FTP传输文件,如果使用FTP传输文件,需要在服务器端安装Serv-U软件。数据库为Oracle 10g,代码为Visual Studio 2008 VC++开发,软件中的代码有BLOB...
包括ARRAY, BFILE, DATE, INTERVALDS, NUMBER, STRUCT, TIME,TIMESTAMP,TIMESTAMP等。 ojdbc5.jar: 适用于jdk5 ojdbc6.jar: 适用于jdk6 ***_g.jar 只是用javac -g编译,生成所有调试信息,其它全一样 ...
oracle对大对象类型操作:blob,clob,nclob,bfile
包括ARRAY, BFILE, DATE, INTERVALDS, NUMBER, STRUCT, TIME,TIMESTAMP,TIMESTAMP等。 ojdbc5.jar: 适用于jdk5 ojdbc6.jar: 适用于jdk6 ***_g.jar 只是用javac -g编译,生成所有调试信息,其它全一样 ...
前端开源库-bfile.zip
前端开源库-bfilebfile,node.js的文件系统包装器
c语言实现把a文件的内容读到b的文件中,很小,只是一个自己学习的一个小例子。
将当前文件夹下的B文件夹中的“BFILE.DOC”文件分别复制到当前文件夹和当前文件夹下的A文件夹中。 3.删除当前文件夹下的C文件夹;删除当前文件夹的A文件夹中的CCC文件夹。 4.将当前文件夹下的“OLE1.DOC”文件改名为...
命令行实用程序,用于加密/解密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 PL/SQL 流水线函数,允许您像普通表一样查询 CLOB、BLOB、BFILE 或 VARCHAR2 中的 CSV 或固定列数据存储。 有关详细说明,请参阅 Wiki。
§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 保留...
BFILE 存放在数据库外的二进制数据 最大长度4G ROWID 数据表中记录的唯一行号 10 bytes ********.****.****格式,*为0或1 NROWID 二进制数据表中记录的唯一行号 最大长度4000 bytes NUMBER(P,S) 数字类型 P为整数位...
表及索引的定义操作 视图、同义词和序列 簇与分区 复杂查询语句的使用 一些高级的用法 安全管理 其它一些常见问题及技巧 常用技巧 Oracle PL/SQL基础 PL/SQL 块结构和组成元素 PL/SQL 处理流程 光标的使用 错误处理 ...
新建账套时提示“无法创建数据库!请检查目录…是否存在,以及系统空间是否充 ...Server\MSSQL\<TARGETDIR>\BFILE\SCM.bak’ 。设备出现错误或设备脱机。详细信息 请参阅 SQL Server 错误日志。 ”发生的原因
4-4 Raw 和 Long Raw 数据类型 ―用于存储二进制数据 用于存储二进制数据 LOB 数据类型 ―CLOB ―BLOB ―BFILE 数据定义语言 数据定义命令 ―CREATE 命令 ―ALTER 命令 ―DROP 命令 ―TRUNCATE 命令 数据操纵语言 ...
4-4 Raw 和 Long Raw 数据类型 ―用于存储二进制数据 用于存储二进制数据 LOB 数据类型 ―CLOB ―BLOB ―BFILE 数据定义语言 数据定义命令 ―CREATE 命令 ―ALTER 命令 ―DROP 命令 ―TRUNCATE 命令 数据操纵语言 ...
说明: 指定一对值 (UTC,TZD), 设置 TIME WITH TIME ZONE 数据类型的默认值, 该数据类型包含 HOUR, MINUTE, SECOND, TIMEZONE_HOUR 和 TIMEZONE_MINUTE 这几个日期时间字段。UTC 是世界时而 TZD 是当地时区。 语法: ...